LCP 07. 传递信息
小朋友 A 在和 ta 的小伙伴們玩?zhèn)餍畔⒂螒?#xff0c;游戲規(guī)則如下:
有 n 名玩家,所有玩家編號(hào)分別為 0 ~ n-1,其中小朋友 A 的編號(hào)為 0
每個(gè)玩家都有固定的若干個(gè)可傳信息的其他玩家(也可能沒(méi)有)。傳信息的關(guān)系是單向的(比如 A 可以向 B 傳信息,但 B 不能向 A 傳信息)。
每輪信息必須需要傳遞給另一個(gè)人,且信息可重復(fù)經(jīng)過(guò)同一個(gè)人
給定總玩家數(shù) n,以及按 [玩家編號(hào),對(duì)應(yīng)可傳遞玩家編號(hào)] 關(guān)系組成的二維數(shù)組 relation。返回信息從小 A (編號(hào) 0 ) 經(jīng)過(guò) k 輪傳遞到編號(hào)為 n-1 的小伙伴處的方案數(shù);若不能到達(dá),返回 0。
示例 1:
輸入:n = 5, relation = [[0,2],[2,1],[3,4],[2,3],[1,4],[2,0],[0,4]], k = 3
輸出:3
解釋:信息從小 A 編號(hào) 0 處開(kāi)始,經(jīng) 3 輪傳遞,到達(dá)編號(hào) 4。共有 3 種方案,分別是 0->2->0->4, 0->2->1->4, 0->2->3->4。
示例 2:
輸入:n = 3, relation = [[0,2],[2,1]], k = 2
輸出:0
解釋:信息不能從小 A 處經(jīng)過(guò) 2 輪傳遞到編號(hào) 2
限制:
2 <= n <= 10
1 <= k <= 5
1 <= relation.length <= 90, 且 relation[i].length == 2
0 <= relation[i][0],relation[i][1] < n 且 relation[i][0] != relation[i][1]
解題思路
構(gòu)建一個(gè)鄰接矩陣,表示有向圖,從0節(jié)點(diǎn)出發(fā)進(jìn)行深度優(yōu)先搜索,查找到達(dá)n-1節(jié)點(diǎn),并且路程為k的路徑
代碼
class Solution {public int numWays(int n, int[][] relation, int k) {boolean[][] graph = new boolean[n][n];for (int[] rel : relation) {graph[rel[0]][rel[1]]=true;}return dfsNumWays(0,graph,k);}public int dfsNumWays(int n, boolean[][] relation, int k) {if(k==0) {return n==relation.length-1?1:0;}int ret=0;for (int i=0;i<relation.length;i++){if(relation[n][i])ret+=dfsNumWays(i,relation,k-1);}return ret;} }總結(jié)
以上是生活随笔為你收集整理的LCP 07. 传递信息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 剑指 Offer 37. 序列化二叉树
- 下一篇: leetcode 1833. 雪糕的最大