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 }