私は現在、グラフ上に存在する強結合コンポーネント(SCC) の数を見つける必要があるプロジェクトを行っています。その後、任意の SCC から別の SCC に向かうエッジがあるかどうかを確認する必要があります。
私は Tarjan のアルゴリズムを使用しており、特定のグラフからすべての SCC を取得できますが、次の部分を計算することはできません。
私には2つのアイデアがありました:
- すべての SCC 内のすべてのエッジを削除します。残っているのは有力な候補だけです。
- どういうわけか、すべての SCC を「頂点」またはスーパー頂点に変えてから、他のスーパー頂点への発信接続があるかどうかを確認します。
私が持っている唯一の制約は次のとおりです。
同じ SCC への接続が複数ある場合は、一度だけ表示する必要があります。
接続を表示するとき、送信 SCC か受信 SCC かに関係なく、SCC に属する最小の頂点 ID を常に表示する必要があります。
ちょっとした例:
x から y へのエッジとして入力
1 2; 2 3; 3 1; 2 4; 4 5; 5 4;
上記のグラフの画像は次のとおりです。ここで、1 = A、2 = B など...
私の質問は次のとおりです。これをどのように計算できますか? 私が思いついたと思われるすべてのオプションは、時間とリソースを消費しすぎるようです。
すべての助けに感謝します:)