leetcode。図L.207カリキュラム-Java

1.特定のトピック

今、あなたは当然に、N-1に0で示されるn個の合計を、選択する必要があります。選択科目の特定の前にいくつかの高度な配置のコースを必要とします。たとえば、あなたがコース0を勉強したい、あなたは完全なレッスン1を必要とする、私たちはそれらを表現するために、一致を使用します[0,1]。コースとその前提条件の与えられた量は、研究のすべてのコースを完了することが可能であるかどうかを判断しますか?

例1:入力:2、[[1,0]]出力:真の説明:2つのコースがあります。レッスン1を学習する前に、あなたはもちろん0を完了する必要があります。だから、それは可能です。

説明:  前提条件入力パターンが隣接行列ではなく、エッジリストで表現される前提条件は、入力側で繰り返されていないと仮定することができます。

アイデアの2.分析

この問題は、図トポロジカルソートのアルゴリズムを適用することが必要な場合があり - 時間シーケンス図のトポロジーの構成では、それはリングが図に存在しないことを示し、上のすべての頂点が出力される場合にそうでない場合は、図中のA環を。

効果的な時刻表は、ループに存在する必要があり、それは建設中に必要とされる、それはすべての頂点上に出力されます。

エッジの形態では、図リスト記憶https://visualgo.net/en/graphds、V1 V0頂点、例えば頂点ポインティングを前提条件として表される参照[I] [1] - >前提条件[I] [0]

3.コード

1  公共 ブール canFinish(INT numCourses、INT [] []前提条件){
 2          INT [] =で新しい新しい INT [numCourses];
 3。         ためINT [] NUMS:前提条件){
 4              における[NUMS [0] ++;       // 各頂点のカウント
5。         }
 6。          スタック<整数> =スタック新しい新しいスタック<>();    // 0度頂点を記録する
7。         ためにINT I = 0; I <numCourses; I ++ ){
 8              IF( IN [I] == 0 ){
 9                 stack.push(I);
 10              }
 11          }
 12は         、一方(!{stack.empty())
 13である             INTコース= ()をstack.pop;
 14              numCourses-- ;
 15              INT [] NUMS:前提条件){
 16                  IF(NUMS ==コース[1]){   // 現在の頂点のすべての頂点が接続-1 
17。                     IF(--in [NUMS [0] == 0)stack.push(NUMS [0])。   // 0度-1スタックにした場合
18である                 }
 19              }
 20である         }
 21は、         リターンnumCoursesは0を==します;
22      }

 

おすすめ

転載: www.cnblogs.com/XRH2019/p/11976891.html