DFS(G)
for each vertex u ∈ G.V
u.color = WHITE
u.π = NIL
time=0
for each vertex u ∈ G.V
if u.color == WHITE
DFS-VISIT(G,u)
DFS-VISIT(G,u)
time = time + 1
u.d = time
u.color = GRAY
for each v ∈ G:Adj[u]
if v.color == WHITE
v.π=u
DFS-VISIT(G,v)
u.color = BLACK
time = time+1
u.f = time
運行時間:θ(V+E)css
u.d<u.f
算法
在對有向圖或無向圖 G=(V,E)
進行的任意深度優先搜索中,對於任意兩個節點 u 和 v 來講,下面三種狀況只有 一種 成立:markdown
[u.d,u.f]
和區間 [v.d,v.f]
徹底分離,在深度優先搜索森林中,節點u不是節點v的後代,節點v也不是節點u的後代[u.d,u.f]
徹底包含在區間 [v.d,v.f]
內,在深度優先樹中,節點u是節點v的後代[v.d,v.f]
徹底包含在區間 [u.d,u.f]
內,在深度優先樹中,節點v是節點u的後代在有向或無向圖G的深度優先森林中,節點v是節點u的真後代當且僅當u.d<v.d<v.f<u.f
成立ui
在有向或無向圖G=(V,E)的深度優先森林中,節點v是節點u的後代當且僅當在發現節點u的時間u.d,存在一條從節點u到節點v的所有由白色節點所構成的路徑。spa
在對無向圖的深度優先搜索中,每條邊要麼是樹邊,要麼是後向邊 。code