1 有向グラフ
定義 1.1 (有向グラフと有向道). 有向グラフとは、有限集合Vと、Vの相異なる二つの要素の順序対からなる集合A⊆V×Vの組D=(V,A)をいう。Vの要素を頂点、Aの要素を辺といい、辺(u,v)をu→vとも書いて、uをその始点、vを終点という。始点と終点が一致する辺は考えない。
頂点vについて、vを始点とする辺の本数を出次数deg+(v)、vを終点とする辺の本数を入次数deg−(v)という。
頂点の列v0,v1,…,vk(k≥0)で、i=0,…,k−1について(vi,vi+1)∈Aを満たすものを、v0からvkへの有向歩道といい、kをその長さという。頂点がすべて相異なる有向歩道を有向道という。v0=vkかつk≥1である有向歩道を閉じた有向歩道といい、そのうちv0,v1,…,vk−1がすべて相異なるものを有向閉路という。uからvへの有向道が存在するとき、vはuから到達可能であるという。長さ0の有向道により、どの頂点も自分自身から到達可能である。
命題 1.2. 有向グラフD=(V,A)について
v∈V∑deg+(v)=v∈V∑deg−(v)=∣A∣が成り立つ。
証明. 集合Aの要素の個数を、二通りに数えます。第一の数え方では、辺を始点によって分類します。始点がvである辺の全体は互いに素な集合へAを分割し、その要素の個数はdeg+(v)です。和の法則(§D2.2 定理 2.1)により∣A∣=∑vdeg+(v)です。第二の数え方では、辺を終点によって分類します。同じ議論により∣A∣=∑vdeg−(v)です。▨
歩道と道の区別は、以降の証明で繰り返し使います。歩道は頂点の重複を許すので作りやすく、道は重複を許さないので扱いやすいという違いがあります。二つは、次の意味で行き来することができます。
補題 1.3. 有向グラフDについて次が成り立つ。
- uからvへの有向歩道が存在すれば、uからvへの有向道が存在する。
- 長さが正の閉じた有向歩道が存在すれば、有向閉路が存在する。
証明. 1 を示します。uからvへの有向歩道は少なくとも一つ存在するので、そのなかで長さが最小のものv0=u,v1,…,vk=vをとります(長さは非負整数なので最小値が存在します)。頂点に重複がありvi=vj(i<j)となったとすると、列v0,…,vi,vj+1,…,vkもまたuからvへの有向歩道であり、その長さはk−(j−i)<kです。これは最小性に反します。よって頂点はすべて相異なり、この歩道は有向道です。
2 を示します。 長さが正の閉じた有向歩道のなかで長さが最小のものv0,v1,…,vk=v0(k≥1)をとります。v0,…,vk−1に重複がありvi=vj(0≤i<j≤k−1)となったとすると、vi,vi+1,…,vjは長さj−i≥1の閉じた有向歩道です。j−i≤k−1<kなので最小性に反します。よってv0,…,vk−1はすべて相異なり、この歩道は有向閉路です。▨
2 閉路をもたない有向グラフの一列への並べ方
定義 2.1 (有向閉路をもたない有向グラフと位相順序). 有向グラフD=(V,A)が有向閉路を一つももたないとき、Dを有向非巡回グラフという。
Vのすべての頂点をちょうど一度ずつ並べた列v1,v2,…,vnがDの位相順序であるとは、Aのすべての辺(vi,vj)についてi<jが成り立つことをいう。すなわち、どの辺も列の前から後ろへ向いている。
位相順序を作るときの出発点になるのは、入ってくる辺をもたない頂点です。
補題 2.2. 頂点を一つ以上もつ有向非巡回グラフには、入次数が0の頂点が存在する。
証明.Dの有向道のうち長さが最大のものを一つとります。有向道の長さは頂点の個数より小さいので上に有界であり、長さ0の有向道が存在するので、長さの最大値をとる有向道が存在します。それをu0,u1,…,ukとします。
u0の入次数が0でないと仮定し、(w,u0)∈Aをとります。wがu0,…,ukのどれとも一致しない場合、w,u0,u1,…,ukは長さk+1の有向道になり、最大性に反します。w=uiとなるiがある場合、u0,u1,…,ui,u0は長さi+1≥1の閉じた有向歩道です(i=0は始点と終点が一致する辺を意味し、そのような辺は考えないのでi≥1です)。補題 1.3の 2 により有向閉路が存在することになり、Dが有向非巡回グラフであることに反します。よってu0の入次数は0です。▨
定理 2.3. 有向グラフDについて、Dの位相順序が存在することと、Dが有向非巡回グラフであることは同値である。
証明. 位相順序が存在すれば有向閉路をもたないことを示します。 位相順序v1,…,vnをとり、有向閉路u0,u1,…,uk=u0(k≥1)が存在すると仮定します。各utが列の何番目かをp(t)と書くと、辺(ut,ut+1)について位相順序の定義からp(t)<p(t+1)です。t=0からk−1までつなぐとp(0)<p(k)ですが、uk=u0よりp(k)=p(0)なので矛盾します。
有向閉路をもたなければ位相順序が存在することを示します。 頂点の個数nについての累積帰納法(§D2.1 命題 1.2)で示します。n=0のときは空の列が位相順序です。
n≥1とし、頂点の個数がnより少ないどの有向非巡回グラフにも位相順序が存在すると仮定します。補題 2.2により、入次数が0の頂点vが存在します。vとそれに接する辺をすべて取り除いた有向グラフをD−vとします。D−vの有向閉路はDの有向閉路でもあるので、D−vも有向非巡回グラフであり、頂点の個数はn−1です。帰納法の仮定によりD−vの位相順序v2,…,vnが存在します。
列v,v2,…,vnがDの位相順序であることを確かめます。Dの辺(x,y)をとります。y=vである場合はvの入次数が0であることに反するので起こりません。y=vかつx=vの場合、vは列の先頭なので順序は正しく保たれています。x=vかつy=vの場合、(x,y)はD−vの辺であり、v2,…,vnがD−vの位相順序であることから、xはyより前に現れます。以上より、すべての辺が前から後ろへ向いています。▨
3 位相順序を求める手続き
定理 2.3の証明は、入次数が0の頂点を取り除くという操作を繰り返しています。この操作をそのまま手続きにします。
定義 3.1 (入次数を減らしながら並べる手続き). 有向グラフD=(V,A)を入力とする次の手続きを考える。各頂点wについて整数c(w)を保持する。
- すべてのw∈Vについてc(w)←deg−(w)とする。Lを空の列、Sを{w∈V:c(w)=0}を格納するキューまたはスタックとする。
- Sが空でない間、次を繰り返す。Sから頂点vを一つ取り出してSから除き、vをLの末尾へ加える。vを始点とする各辺(v,w)についてc(w)←c(w)−1とし、その結果c(w)=0になったならばwをSへ加える。
- Lの長さがnならばLを出力し、そうでなければ「有向閉路をもつ」と答える。
定理 3.2.定義 3.1の手続きは必ず停止する。Dが有向非巡回グラフであるときはDの位相順序を出力し、そうでないときは「有向閉路をもつ」と答える。隣接リストによってDを保持すると、手数はΘ(n+m)である。
証明.R=V∖{L に現れる頂点}とおきます。
主張 3.2.1. 手順 2 の各回を始める時点で、次の三つが成り立ちます。
- Lは相異なる頂点の列であり、Lの頂点によるDの誘導部分グラフの位相順序になっています。
- Rの頂点を始点としLの頂点を終点とする辺は存在しません。
- すべてのw∈Rについて、c(w)はRの頂点を始点としwを終点とする辺の本数に等しく、S={w∈R:c(w)=0}です。
証明.Lは空、R=Vなので主張 3.2.1 (1)と主張 3.2.1 (2)は空虚に成り立ち、主張 3.2.1 (3)は手順 1 の定め方そのものです。
三つが成り立っているとし、Sからvを取り出します。主張 3.2.1 (3)よりc(v)=0、すなわちRの頂点からvへの辺は存在しません。vをLの末尾へ移すと、新しいRはR∖{v}です。
vを終点とする辺の始点は、Rには無いのでLの頂点であり、それらはvより前に現れます。vを始点とする辺の終点のうちLにあるものは、主張 3.2.1 (2)により存在しません。よってLにvを加えた列も、その頂点による誘導部分グラフの位相順序であり、主張 3.2.1 (1)が保たれます。
新しいRの頂点から新しいLの頂点への辺を考えます。終点がv以外のLの頂点である辺は、もとの主張 3.2.1 (2)により存在しません。終点がvである辺は、c(v)=0によりRの頂点を始点としないので、主張 3.2.1 (2)が保たれます。
vがRから抜けたので、w∈R∖{v}に対して数えるべき辺の本数は、辺(v,w)が存在する場合にちょうど1減ります。手順 2 はこの場合にだけc(w)を1減らしているので、cは正しく保たれます。Sの更新も、c(w)が0になった頂点を加えるという形で主張 3.2.1 (3)を保ちます。▨
停止すること。 手順 2 の各回でLの長さがちょうど1増え、∣R∣がちょうど1減ります。∣R∣は非負整数なので、繰り返しは高々n回で終わります。
出力が正しいこと。 繰り返しを抜けた時点でS=∅です。主張 3.2.1 (3)より、Rのすべての頂点wについてc(w)≥1、すなわちRの頂点からwへの辺が存在します。R=∅とすると、Rによる誘導部分グラフのすべての頂点の入次数が1以上になるので、補題 2.2の対偶により、この誘導部分グラフは有向閉路をもちます。それはDの有向閉路でもあります。したがって、Dが有向非巡回グラフであればR=∅、すなわちLの長さはnであり、主張 3.2.1 (1)によりLはD全体の位相順序です。逆にR=∅のときはDが有向閉路をもつので、手順 3 の答えは正しくなっています。
手数。 手順 1 は各辺を一度ずつ調べて入次数を数えるのでΘ(n+m)です。Sをキューまたはスタックで実装すれば、その末端での頂点の挿入と取出しはそれぞれΘ(1)です。手順 2 では、各頂点がSへ入るのはc(w)が0になった一度だけであり、各辺(v,w)は始点vがLへ移るときに一度だけ調べられます。したがって繰り返し全体でΘ(n+m)です。手順 3 はΘ(1)です。▨
4 半順序を全順序へ広げる操作
有向非巡回グラフの到達可能性は、順序としての性質をもちます。
命題 4.1.D=(V,A)を有向非巡回グラフとし、u≤vを「vがuから到達可能である」と定めると、≤はV上の半順序である。
証明. 反射律。 長さ0の有向道により、どの頂点も自分自身から到達可能です。
推移律。u≤vかつv≤wとすると、uからvへの有向道とvからwへの有向道が存在します。二つをつなぐとuからwへの有向歩道が得られるので、補題 1.3の 1 によりuからwへの有向道が存在します。よってu≤wです。
反対称律。u≤v、v≤u、u=vと仮定します。uからvへの有向道とvからuへの有向道をつなぐと、長さが正の閉じた有向歩道が得られます(u=vより、それぞれの長さは1以上です)。補題 1.3の 2 により有向閉路が存在することになり、Dが有向非巡回グラフであることに反します。よってu=vです。▨
位相順序は、この半順序を全順序へ広げます。逆に、どの有限半順序集合も、この形で全順序へ広げることができます。
定理 4.2.(P,≤)を有限半順序集合とすると、P上の全順序⪯で、a≤bならばつねにa⪯bとなるものが存在する。このような⪯を≤の線形拡大という。
証明. 有向グラフD=(P,A)を、A={(a,b):a≤b, a=b}によって定めます。Dが有向閉路をもたないことを示します。有向閉路u0,u1,…,uk=u0があるとすると、始点と終点が一致する辺を考えないのでk≥2です。辺の定め方からu0≤u1かつu0=u1であり、またu1≤u2≤⋯≤uk=u0と≤の推移律からu1≤u0です。反対称律によりu0=u1となり、u0=u1に反します。よってDは有向非巡回グラフです。
定理 2.3によりDの位相順序v1,…,vnが存在します。vi⪯vjをi≤jと定めると、⪯はP上の全順序です。a≤bかつa=bならば(a,b)∈Aであり、位相順序の定義からaはbより前に現れるのでa⪯bです。a=bのときはa⪯bが反射律から従います。▨
例 4.3.P={1,2,3,4,6,12}に整除関係を入れた半順序集合(§D2.5 例 3.7)を考える。4と6は比較不能である。
1,2,3,4,6,12という並べ方は線形拡大である。実際、1はすべての要素の前にあり、2は4,6,12の前に、3は6,12の前に、4と6は12の前にある。
1,3,2,6,4,12も線形拡大である。1はすべての前、3は6と12の前、2は6,4,12の前、6と4は12の前にある。二つの線形拡大は4と6の前後を逆に定めており、比較不能な対の前後は線形拡大ごとに変わりうる。
一方1,2,4,3,12,6は線形拡大ではない。6が12より後ろにあるが6∣12なので、6⪯12でなければならない。
5 強連結成分
向きを考えると、到達可能であることは対称ではありません。互いに到達可能であるという関係をとると、対称性が回復します。
定義 5.1 (強連結成分). 有向グラフD=(V,A)の頂点u,vについて、uからvへ到達可能であり、かつvからuへ到達可能であるときu∼vと書く。∼による同値類をDの強連結成分という。
命題 5.2.定義 5.1の関係∼はV上の同値関係である。
証明. 反射律は長さ0の有向道から従います。対称律は、∼の定義がuとvについて対称であることから従います。推移律は、命題 4.1の推移律の証明と同じく、有向道をつないで補題 1.3の 1 を適用すれば得られます。▨
同値関係と分割の対応(§D2.5 命題 2.5)により、強連結成分は頂点集合を過不足なく分割します。成分を一つの頂点へ縮めると、有向閉路が消えます。
定理 5.3.Dの強連結成分の全体を頂点集合とし、相異なる成分C=C′について、Cのある頂点からC′のある頂点への辺がDに存在するときC→C′という辺を張って得られる有向グラフをDの縮約という。Dの縮約は有向非巡回グラフである。
証明. 縮約に有向閉路C0,C1,…,Ck=C0(k≥1)が存在すると仮定します。C0,…,Ck−1は相異なる強連結成分です。CiからCi+1への辺があるので、Ciのある頂点からCi+1のある頂点へ到達することができます。同じ成分の頂点どうしは互いに到達可能なので、Ciのどの頂点からもCi+1のどの頂点へも到達可能です。これをi=0から順につなぐと、C0のどの頂点からもC1のどの頂点へも到達可能であり、C1のどの頂点からもC2,…,Ck=C0のどの頂点へも到達可能です。したがってC0の頂点とC1の頂点は互いに到達可能であり、C0=C1となります。k≥2ならばこれはC0とC1が相異なることに反します。k=1の場合は、縮約の辺が相異なる成分のあいだにだけ張られることに反します。▨
6 深さ優先探索による強連結成分への分解
強連結成分を求めるには、深さ優先探索を二度実行します。一度目で頂点に順序を付け、二度目でその順序に従って辺の向きを反転したグラフを探索します。
定義 6.1 (有向グラフ上の深さ優先探索). 有向グラフD=(V,A)上の深さ優先探索とは、次の手続きをいう。大域的な時計を用意し、操作のたびに1進める。頂点uを初めて訪問した時刻を行き掛け時刻d[u]、uから出るすべての辺を調べ終えてuから戻る時刻を帰り掛け時刻f[u]と書く。
uを訪問したときの動作は、uを訪問済みとし、uを始点とする各辺(u,w)を順に調べ、wが未訪問であればwを再帰的に訪問し、すべて調べ終えたらuから戻る、というものである。この再帰でwを初めて訪問したときの辺(u,w)を集めたものを深さ優先探索の森といい、この森における先祖と子孫の関係を用いる。
Vのすべての頂点を、あらかじめ定めた順に見て、未訪問であればそこから訪問を開始する。すべての頂点はちょうど一度訪問され、dとfの値は2n個の相異なる時刻をとる。
無向グラフの場合と同じく、時刻の区間には入れ子の構造があります。
補題 6.2. 相異なる頂点u,vについて、区間[d[u],f[u]]と[d[v],f[v]]は、互いに素であるか、一方が他方に含まれるかのいずれかである。さらに、[d[v],f[v]]⊂[d[u],f[u]]であることと、vが深さ優先探索の森においてuの子孫であることは同値である。
証明.d[u]<d[v]としてよい(そうでなければuとvを入れ替えます)。区間[d[u],f[u]]は、uの訪問が再帰の途中にある時間帯にあたります。d[v]<f[u]ならば、vはuの訪問が終わる前に発見されているので、再帰が後入れ先出しの規律に従うことから、vの訪問はuから戻る前に終わりf[v]<f[u]です。すなわち[d[v],f[v]]⊂[d[u],f[u]]です。d[v]>f[u]ならばd[u]<f[u]<d[v]<f[v]で二つの区間は互いに素です。時刻はすべて相異なるのでd[v]=f[u]は起こりません。
包含と子孫関係が同値であることを示します。[d[v],f[v]]⊂[d[u],f[u]]ならば、vはuの訪問が再帰の途中にある間に発見されており、その間に発見される頂点は、再帰の入れ子の構造からすべてuの子孫です。逆にvがuの子孫ならば、vはuから森の辺を順にたどってuの訪問中に発見され、uから戻る前に訪問を終えるので、d[u]<d[v]<f[v]<f[u]です。▨
次の補題が、二度目の探索の正しさを支えます。
補題 6.3. 深さ優先探索において、頂点uとv(u=v)が次を満たすとする。uからvへの有向道u=w0,w1,…,wk=vが存在し、時刻d[u]の直前においてw0,…,wkがすべて未訪問である。このときvは深さ優先探索の森においてuの子孫であり、とくにf[v]<f[u]である。
証明.wiがuの子孫でもu自身でもないような最小のiが存在すると仮定し、そのiをとります。w0=uなのでi≥1であり、iの最小性からwi−1はu自身かuの子孫です。補題 6.2によりd[u]≤d[wi−1]<f[wi−1]≤f[u]です。
辺(wi−1,wi)は、wi−1の訪問中、すなわち区間[d[wi−1],f[wi−1]]に属するある時刻に調べられます。その時点でwiが未訪問であれば、wiはwi−1の子として訪問され、uの子孫になります。これはiの取り方に反します。その時点でwiが訪問済みであれば、wiはその時刻より前に発見されているのでd[wi]<f[wi−1]≤f[u]です。また仮定よりwiは時刻d[u]の直前に未訪問なのでd[u]<d[wi]です。よってd[u]<d[wi]<f[u]となり、補題 6.2により[d[wi],f[wi]]⊂[d[u],f[u]]、すなわちwiはuの子孫です。これもiの取り方に反します。
したがってそのようなiは存在せず、v=wkはu自身かuの子孫です。u=vなのでvはuの子孫であり、補題 6.2によりf[v]<f[u]です。▨
補題 6.4.D上で深さ優先探索を一度実行し、帰り掛け時刻fを得たとする。CとC′を相異なる強連結成分とし、Cのある頂点からC′のある頂点への辺が存在するとする。このとき
v∈Cmaxf[v]>v∈C′maxf[v]が成り立つ。
証明. まず、C′の頂点からCの頂点への有向道は存在しません。存在すれば、CからC′への辺とあわせてCとC′の頂点が互いに到達可能になり、C=C′となるからです。
C∪C′の頂点のうち、探索が最初に訪問するものをxとします。
x∈Cの場合。 時刻d[x]の直前において、C∪C′の頂点はすべて未訪問です。v∈Cに対しては、xとvが同じ強連結成分に属するのでxからvへの有向道があります。この道の上の頂点wはxから到達可能であり、またwからvへ、vからxへ到達可能なのでwからxへも到達可能です。よってw∼xであり、道の頂点はすべてCに属します。v∈C′に対しては、xからCの中を通ってCの頂点aへ行き、辺(a,b)(b∈C′)を通り、C′の中を通ってvへ行く有向歩道があり、補題 1.3の 1 によって有向道が得られます。その道の頂点はC∪C′に含まれます。いずれの場合も道の頂点はd[x]の直前にすべて未訪問なので、補題 6.3によりf[v]<f[x](v=xのとき)です。よってf[x]=maxv∈C∪C′f[v]であり、とくにmaxv∈Cf[v]=f[x]>maxv∈C′f[v]です。
x∈C′の場合。 同じ議論により、C′のすべての頂点はxの子孫またはx自身であり、f[x]=maxv∈C′f[v]です。一方、C′からCへの有向道は存在しないので、xからの訪問でCの頂点が発見されることはありません。Cの頂点はd[x]の直前にすべて未訪問なので、xの訪問が終わる時刻f[x]の時点でもすべて未訪問であり、その後に発見されます。したがってCのすべての頂点vについてd[v]>f[x]、よってf[v]>f[x]です。ゆえにmaxv∈Cf[v]>f[x]=maxv∈C′f[v]です。▨
定義 6.5 (二度の深さ優先探索による分解). 有向グラフD=(V,A)を入力とする次の手続きを考える。
- D上で深さ優先探索を実行し、各頂点の帰り掛け時刻fを得る。
- すべての辺の向きを反転した有向グラフDT=(V,{(v,u):(u,v)∈A})を作る。
- 頂点をfの大きい順に並べ、その順に見て、未訪問であればその頂点からDT上の深さ優先探索を開始する。一回の開始で訪問される頂点の集合を、一つのまとまりとして出力する。
定理 6.6.定義 6.5の手続きは停止し、手順 3 が出力する頂点の集合の族は、Dの強連結成分の全体に一致する。隣接リストによってDを保持すると、手数はΘ(n+m)である。
証明. まず、DとDTの強連結成分は一致します。uからvへのDの有向道は、逆にたどればvからuへのDTの有向道であり、その逆も成り立つので、互いに到達可能であるという関係はDとDTで同じだからです。
主張 6.6.1.k回目の開始の始点をxkとし、xkが属するDの強連結成分をCkとします。このとき、k回目の開始で訪問される頂点の集合はちょうどCkであり、k回目の開始の直前に訪問済みである頂点の集合はC1∪⋯∪Ck−1です。
証明.k=1のとき、開始の直前に訪問済みである頂点の集合は空集合です。k>1とし、1回目からk−1回目まで主張が成り立つと仮定すると、k回目の開始の直前に訪問済みである頂点の集合はC1∪⋯∪Ck−1です。強連結成分はVを分割するので、xkが未訪問であることからCkはC1,…,Ck−1のいずれとも異なり、したがってCkの頂点はすべて未訪問です。
Ckの頂点はすべて訪問されること。v∈Ckとすると、vはDTにおいてxkから到達可能であり、その有向道の頂点はすべてCkに属するので未訪問です。よって深さ優先探索はvを訪問します(補題 6.3)。
訪問される頂点がCkを出ないこと。Ckに属さない頂点wが訪問されたと仮定します。wが属する強連結成分をC′とするとC′=Ckであり、wは開始の直前に未訪問だったので、上と同じ理由でC′の頂点はすべて開始の直前に未訪問です。wが訪問されたことから、DTにおいてxkからwへの有向道が存在します。これをDの側で読むと、wからxkへの有向道です。この道が通る強連結成分を順に並べると、Dの縮約におけるC′からCkへの辺の列が得られます(同じ成分の中を通る部分は縮約では動きません)。補題 6.4を各辺へ適用してつなぐと
v∈C′maxf[v]>v∈Ckmaxf[v]が得られます。ところが手順 3 はfの大きい順に未訪問の頂点を選ぶので、xkは開始の直前に未訪問である頂点のうちfが最大のものです。CkとC′の頂点はいずれも開始の直前に未訪問なので、maxv∈Ckf[v]=f[xk]≥maxv∈C′f[v]でなければならず、矛盾します。
以上よりk回目の開始で訪問される頂点の集合はちょうどCkです。したがって、この開始後の訪問済み頂点の集合はC1∪⋯∪Ckであり、次の開始の直前についての主張も従います。累積帰納法により、主張はすべての開始について成り立ちます。▨
主張 6.6.1により、手順 3 の各回が出力する集合は一つの強連結成分です。手順 3 はすべての頂点が訪問されるまで開始を繰り返すので、出力される集合の族は強連結成分の全体に一致します。
停止すること。 深さ優先探索では各頂点がちょうど一度訪問され、各辺がちょうど一度調べられるので、手順 1 と手順 3 はいずれも有限回の操作で終わります。手順 2 も辺の本数だけの操作です。
手数。 手順 1 と手順 3 の深さ優先探索は、隣接リストのもとでそれぞれΘ(n+m)です。手順 2 は各辺を一度ずつ見て向きを入れ替えるのでΘ(n+m)です。手順 3 の並べ替えは、帰り掛け時刻が1から2nまでの相異なる整数であることから、時刻の順に頂点を記録しておけば追加の手数なしに得られます。よって全体でΘ(n+m)です。▨
例 6.7.V={1,2,3,4,5}、A={(1,2),(2,3),(3,1),(3,4),(4,5),(5,4)}とする。
手順 1。 頂点1から訪問を始め、辺を添字の小さい順に調べるとすると、訪問は1→2→3→4→5と進む。5からは4への辺しかなく4は訪問済みなので5から戻り、以下順に戻る。時刻はd[1]=1,d[2]=2,d[3]=3,d[4]=4,d[5]=5,f[5]=6,f[4]=7,f[3]=8,f[2]=9,f[1]=10となる。
手順 2。DTの辺は(2,1),(3,2),(1,3),(4,3),(5,4),(4,5)である。
手順 3。fの大きい順は1,2,3,4,5である。1からDT上の探索を始めると1→3→2と訪問し、2からは1への辺だけで1は訪問済みなので終わる。訪問された集合は{1,2,3}である。次に未訪問でfが最大の頂点は4である。4からの探索は3(訪問済み)と5を見て、5からは4(訪問済み)を見て終わる。訪問された集合は{4,5}である。
得られた{1,2,3}と{4,5}は、実際にDの強連結成分である。1→2→3→1により1,2,3は互いに到達可能であり、4→5→4により4,5は互いに到達可能である。一方4から1への有向道は存在しない(4と5を出る辺の終点は4と5だけである)ので、二つは別の成分である。
補題 6.4も確かめることができる。C={1,2,3}からC′={4,5}への辺(3,4)があり、maxv∈Cf[v]=10>7=maxv∈C′f[v]である。