有向グラフ内の2つの異なる頂点は、グラフ内に互いからのパスがある場合、強く接続されます。強連結成分グラフのサブセットに別個の頂点の各ペアが強固に接続され、サブセットにそれ以上の頂点を追加すると、このプロパティを破るであろうように、グラフのサブセットです。
あなたの課題は、グラフを強く接続されたコンポーネントに分離することです。具体的には、グラフ内のすべてのSCCを出力する必要があります。
I / O:
入力として、有向エッジのリスト、隣接リスト、隣接行列、またはその他の妥当な入力形式を使用できます。よくわからない場合は尋ねてください。グラフには完全に接続されていない頂点がなく、自己エッジがないと仮定できますが、それ以上の仮定はできません。オプションで、頂点の数だけでなく、頂点のリストを入力として使用することもできます。
出力として、各サブリストが強く接続されたコンポーネントである頂点のリストのリストなどの頂点のパーティション分割、または各ラベルが異なるコンポーネントに対応する頂点のラベル付けのいずれかを指定する必要があります。
ラベルを使用する場合、ラベルは頂点、または整数の連続したシーケンスである必要があります。これは、計算がラベルに流れ込むのを防ぐためです。
例:
これらの例は、各エッジが1番目のエントリから2番目のエントリに向けられているエッジのリストと、出力パーティションを取ります。この形式または別の形式を自由に使用できます。
入力は最初の行にあり、出力は2行目にあります。
[[1, 2], [2, 3], [3, 1], [1, 4]]
[[1, 2, 3], [4]]
[[1, 2], [2, 3], [3, 4]]
[[1], [2], [3], [4]]
[[1, 2], [2, 1], [1, 3], [2, 4], [4, 2], [4, 3]]
[[1, 2, 4], [3]]
[[1, 2], [2, 3], [2, 5], [2, 6], [3, 4], [3, 7], [4, 3], [4, 8], [5, 1], [5, 6], [6, 7], [7, 6], [8, 7], [8, 4]]
[[1, 2, 5], [3, 4, 8], [6, 7]]
スコアリングと制限:
いつものように、標準的な抜け穴は禁止されています。また、強力に接続されたコンポーネントを特に扱うビルトインは禁止されています。
ソリューションは、提供された例で1時間以内に実行する必要があります。(これは、遅い指数関数的な解法を防ぐことを目的としています。)
これはコードゴルフです。最少バイトが勝ちます。
8
は、コンポーネントに含まれていないことを取得しています。[3,4]
なぜなら、それぞれ6
と7
(どちらにも届かない)しかできないからです。