最初の DFS の結果は次のとおりです。
----------v1--------------v2-----------
ここで、「-」は任意の数を示し、強連結成分gのすべての頂点はv1とv2の間に現れます。
ポストオーダーによる DFS は、次のことを保証します。
- v2の後のすべての頂点は逆グラフのgを指しません(つまり、元のグラフのgからこれらの頂点に到達することはできません)。
- 逆グラフのgからv1より前のすべての頂点を指すことはできません(つまり、元のグラフのこれらの頂点からgに到達することはできません)。
一言で言えば、最初の DFS は、2 番目の DFS で、以前にアクセスされた強連結コンポーネントが、他の未アクセスの強連結コンポーネントへのエッジ ポイントを持つことができないことを保証します。
詳細な説明
次のようにグラフを単純化しましょう。
- グラフ全体が G
- G には 2 つの強連結成分が含まれます。1 つはgで、もう 1 つは単一の頂点vです。
- vとgの間には、 vからgまたはgからvのいずれかのエッジが 1 つしかありません。このエッジの名前はeです。
- g' , e'はg , eの逆を表す
このアルゴリズムが失敗する可能性がある状況は、次のように結論付けることができます。
- vから DFS を開始し、e'はvからg'を指す
- g'内の頂点から DFS を開始し、e'はg'からvを指す
状況 1 の場合
元のグラフは のようg-->v
になり、逆のグラフは のようになりg'<--v
ます。
v から 2 番目の DFS を開始するには、最初の DFS によって生成されるポスト オーダーが次のようになる必要があります。
g1, g2, g3, ..., v
しかし、 vからもg'からも最初の DFS を開始しても、そのようなポスト オーダーが得られないことは簡単にわかります。したがって、この状況では、2 番目の DFS が両方の頂点から開始しないことが最初の DFS であることが保証されます。から外れており、強連結成分を指しています。
状況 2 の場合
状況 1 と同様に、元のグラフがg<--v
であり、反転したグラフが である状況 2 では、 vがg 'のどの頂点よりも前にアクセスg'-->v
されることが保証されます。