首页 > 编程语言 >算法戴高乐计划-01篇

算法戴高乐计划-01篇

时间:2023-09-14 21:23:19浏览次数:33  
标签:arr 01 int 玩家 算法 set relation 编号 戴高乐

LCP 07. 传递信息

小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下:

  1. 有 n 名玩家,所有玩家编号分别为 0 ~ n-1,其中小朋友 A 的编号为 0
  2. 每个玩家都有固定的若干个可传信息的其他玩家(也可能没有)。传信息的关系是单向的(比如 A 可以向 B 传信息,但 B 不能向 A 传信息)。
  3. 每轮信息必须需要传递给另一个人,且信息可重复经过同一个人

给定总玩家数 n,以及按 [玩家编号,对应可传递玩家编号] 关系组成的二维数组 relation。返回信息从小 A (编号 0 ) 经过 k 轮传递到编号为 n-1 的小伙伴处的方案数;若不能到达,返回 0。

比如:
输入:n = 5, relation = [[0,2],[2,1],[3,4],[2,3],[1,4],[2,0],[0,4]], k = 3
输出:3
解释:信息从小 A 编号 0 处开始,经 3 轮传递,到达编号 4。共有 3 种方案,分别是 0->2->0->4, 0->2->1->4, 0->2->3->4。

怎么求解?

  1. 先说思路
    有很多解法,其中最快上手的肯定是DFS,很像全排列,一个个坐标穷举,递归走k-1次,看有几个到n-1位置就行
    要点:
    (1)二维数组要用数据结构处理下,避免每次都for循环On,最好处理成O1;
    (2)DFS代码要很娴熟

  2. 代码

class Solution {
    Map<Integer, Set<Integer>> map = new HashMap<>();
    int result = 0;
    public int numWays(int n, int[][] relation, int k) {
        // 转化数据模型,方便取,不然每次都要遍历
        for(int [] arr:relation ){
            Set<Integer> set  = map.getOrDefault(arr[0] , new HashSet<>());
            set.add(arr[1]);
            map.put(arr[0],set);
        }
        dfs(0,0,k,n);
        return result;
    }
    void dfs(int current, int levels,int k,int n){
        if(levels == k){
            if(current == n-1) result++;
            return;
        }
        // 当前节点能到达的位置
        Set<Integer> set = map.get(current);
        if(set == null) return;
        for(int index : set){
            dfs(index,levels+1,k,n);
        }
    }
}

学习要点:

  1. 处理二维数组的数据结构
    Map<Integer,Set<Integer>>绝了,key放当前位置坐标,Set放能走到的位置。
  2. DFS算法基础模型还是要好好训练下,很重要。

标签:arr,01,int,玩家,算法,set,relation,编号,戴高乐
From: https://www.cnblogs.com/yuanbaobao/p/17703475.html

相关文章

  • SQL的学习 01
    受朋友邀请发第一篇博文,加入51CTO!我是一个初学者,最近在接触SQL,本篇浅记自己的学习。当你准备进入数据库世界,学习SQL(StructuredQueryLanguage)是一个非常重要的第一步。SQL是用于管理和操作关系型数据库的标准语言,无论你是想成为一名数据分析师、数据库管理员还是开发人员,都需要掌......
  • 代码随想录算法训练营第八天
    代码随想录算法训练营第八天|LeetCode28(实现strStr())LeetCode459(重复的子字符串)28:实现strStr()LeetCode28(实现strStr())classSolution{publicintstrStr(Stringhaystack,Stringneedle){//构造next数组int[]next=newint[needle.l......
  • 01什么是编程
    学习内容什么是编程计算机的组成原理计算机操作系统编程语言是什么什么是编程什么是编程语言编程语言是什么:人与计算机交流的介质什么是编程?编程:使用编程语言写出一堆文件,这堆文件会达到一个目的编程有什么用?让计算机帮我们干活,计算机取代工人,解放劳动力计算机组成......
  • speex降噪算法移植及测试
    下载libspeexdspPC上,编译。修改内置demo输入in.pcm,输出out.pcm,用音频分析软件及实测效果OK.#ifdefHAVE_CONFIG_H#include"config.h"#endif#include"speex/speex_preprocess.h"#include<stdio.h>#defineNN160intmain(){  shortin[NN];  inti;  SpeexPre......
  • speexdsp库实现音频3A算法
    speex是音频编解码库,speexdsp是附加的音频DSP库,是音频降噪库,也有回声抑制和自动增益控制功能,即通常说的音频3A算法。现在音频编解码大部分都是使用opus库,很少使用speex进行音频编解码,但还是会使用speexdsp库的3A算法对音频数据进行处理。本例是在ubuntu环境下,C/C++语言,使用Qt进......
  • 算法竞赛文件读写
    freopen使用freopen进行文件读写,可以节约测试时重复输入的时间,用法可以参考官网std::freopen-cppreference.com。程序中使用cin/cout和scanf/printf均可。模板#include<cstdio>usingnamespacestd;intmain(){//提交时记得将这两行注释掉freopen("E:\\c\\in......
  • Lnton羚通视频分析算法平台人员闯入算法检测告警详细介绍
    Lnton羚通的算法算力云平台有以下显著特点:高性能、高可靠性、高可扩展性和低成本。用户可以通过该云平台获取高效、强大的算法计算服务,快速而灵活地运行各种复杂的计算模型和算法。该平台广泛涵盖机器学习、人工智能、大数据分析和图像识别等领域。此外,云平台还提供丰富的算法库和......
  • 【理论优化算法】基于理论和优化算法求解单目标优化问题附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 【雷电附着算法】基于雷电附着优化算法LAPO求解单目标优化问题附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 视频监控/安防监控/视频AI智能分析:小动物识别算法场景汇总
    随着人们对生态环境的关注日益提升,大家对动物保护意识也逐渐增强。旭帆科技智能分析网关小动物识别算法应运而生。除了对保护动物的识别以外,旭帆科技AI智能分析网关还可以识别常见的老鼠等动物,助力明厨亮灶监管,保卫食品安全。TSINGSEE青犀AI智能分析网关小动物识别算法,可以应用于各......