25. 別のアルゴリズム [Tarjan 1976]
• 各頂点 v からDFSする
• Topological Sort( G ) :
• For all (u in G)
• Visit (u)
• Visit ( u ) :
• If ( u が探索済みでないなら )
• For all ( u から出る辺の行き先 v )
• Visit ( v )
• u を結果列の先頭に挿入
すべての頂点からDFS
帰りがけに結果列に追加
25 / 46
26. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {}
26 / 46
27. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {}
aからDFS
27 / 46
28. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {}
行き先がないので帰る
28 / 46
29. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {d}
帰りがけに結果列に追加
29 / 46
30. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {a,d}
同様
30 / 46
31. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {a,d}
bからDFS
31 / 46
32. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {b,a,d}
既に探索済みなので終了
32 / 46
33. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {b,a,d}
cからDFS
33 / 46
34. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {b,a,d}
以下、同様
34 / 46
35. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {i,b,a,d}
35 / 46
36. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {c,i,b,a,d}
36 / 46
37. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {c,i,b,a,d}
37 / 46
38. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {e,c,i,b,a,d}
38 / 46
39. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {e,c,i,b,a,d}
39 / 46
40. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {f,e,c,i,b,a,d}
40 / 46
41. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {f,e,c,i,b,a,d}
41 / 46
42. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {f,e,c,i,b,a,d}
42 / 46
43. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {h,f,e,c,i,b,a,d}
43 / 46
44. [Tarjan 1976] の動作例
• (どの順でもよいが)a,b,c,d,e,f,g,h,iの順でDFSする
a
h
c
d e
fgb
i ans = {g,h,f,e,c,i,b,a,d}
答え
44 / 46