有向グラフの最終サイクルを数える
仕事 単純な有向グラフの最終サイクル数を正確にカウントするプログラムまたは関数を、選択した言語で作成する必要があります。 この特定の種類の有向グラフは、n個の整数の配列として表され、それぞれが1からn(または言語が0から数える場合は0からn-1)の間で独立して選択されたランダムな値を持ちます。グラフは、1つのインデックス(ノード)から、開始インデックスで見つかった値と一致するインデックスを指す矢印と考えることができます。 関数は、最大n = 1024またはそれより小さい整数サイズの大きなグラフを受け入れることができる必要があります。 例 n = 10について次のグラフを考えてみます。 [9, 7, 8, 10, 2, 6, 3, 10, 6, 8] インデックス1には9が含まれているため、インデックス1からインデックス9への矢印があります。インデックス9には6が含まれているため、矢印9-> 6があります。インデックス6には6が含まれています。 インデックス2には7が含まれます。インデックス7には3が含まれます。インデックス3には8が含まれます。インデックス8には10が含まれます。インデックス10には8が含まれるため、2番目のターミナルサイクルになります(8-> 10-> 8-> 10など)。 )。 インデックス4->10。2番目のターミナルサイクルに入ります。同様に、インデックス5-> 2-> 7-> 3->8。これも2番目のターミナルサイクルの一部です。 この時点で、すべてのインデックス(ノード)がチェックされ、すべてのパスが追跡され、2つの固有のターミナルサイクルが識別されています。したがって、この有向グラフの最終サイクルの数であるため、関数は2を返す必要があります。 得点 最小のコードを目指しますが、ターミナルサイクルが正しくカウントされることを確認してください。1週間の勝利後の最短コード。 テストケース コードの正しさを確認するためのテストケースをいくつか示します。言語が0から始まる配列インデックスをカウントする場合は、範囲外のインデックスを防ぐために、各配列要素の値から1を差し引く必要があります。 n = 32、5サイクル: [8, 28, 14, 8, 2, 1, 13, 15, 30, 17, 9, …