深さ優先探索アルゴリズムの質問と分析

深さ優先探索アルゴリズムの質問と分析

トピックは次のとおりです

子供Aはtaの友達とメッセージゲームをしています。ゲームのルールは次のとおりです。

n人のプレイヤーがいて、そのすべてに0からn-1までの番号が付けられ
ており、そのうち子Aの数は0です。各プレイヤーには、情報を送信できる他のプレイヤーの数が固定されています(または存在しない場合があります)。情報送信関係は一方向です(たとえば、AはBに情報を送信できますが、BはAに情報を送信できません)。
情報の各ラウンドは別の人に送信する必要があり、同じ人を通して情報を繰り返すことができます。
プレーヤーの総数nを指定し、2次元配列関係で構成される[プレーヤー番号、対応する合格プレーヤー番号]関係を押します。戻り情報は、小さいA(番号0)からn-1からkラウンドまでの番号が付けられた小さいパートナーに渡されたプランの数です。到達できない場合は、0を返します。

例1:

入力:n = 5、関係= [[0,2]、[2,1]、[3,4]、[2,3]、[1,4]、[2,0]、[0,4] ]、k = 3

出力:3

説明:情報は小さいAの番号0から始まり、3ラウンドを通過し、番号4に到達します。0-> 2-> 0-> 4、0-> 2-> 1-> 4、0-> 2-> 3-> 4の3つのスキームがあります。

例2:

入力:n = 3、関係= [[0,2]、[2,1]]、k = 2

出力:0

説明:2ラウンドでSmallAからNo.2に情報を渡すことができません

制限:

2 <= n <= 10
1 <= k <= 5
1 <= Relation.length <= 90、AND Relation [i] .length == 2
0 <= Relation [i] [0]、relation [i] [ 1] <n関係[i] [0]!=関係[i] [1]

解決策は次のとおりです

kはステップ数を表し、各ステップはk-1です。k = 0の場合、停止します。n-1の場合は、res ++です。

class Solution {
    
    
    int res=0;
    public int numWays(int n, int[][] relation, int k){
    
    
        dfs(n,relation,k,0);
        return res;
    }
    
    public void dfs(int n,int[][] r,int k,int curr){
    
    
        if (k==0){
    
    
            if (curr==n-1) res++;
        }
        for (int i=0;i<r.length;i++){
    
    
            if (curr==r[i][0] && k>0){
    
    
                dfs(n,r,k-1,r[i][1]);
            }
        }
    }
}

おすすめ

転載: blog.csdn.net/weixin_43372169/article/details/109956092