赞
踩
以下内容主要参考中国大学MOOC《算法设计与分析》,墙裂推荐希望入门算法的童鞋学习!
有向图中环路的存在性判断
输入:
输出:
根据有向图中深度优先搜索边的性质,并研究实例,我们可以猜想有向图存在环路等价于搜索时出现后向边。
证明:
DFS-Judge-Cycle(G)
输入:图 G G G
输出:是否存在环路
新建数组color[1..V],pred[1..V]
// 初始化
for v ∈ V do
pred[v] ← NULL
color[v] ← WHITE
end
for v ∈ V do
if color[v] = WHITE then
if DFS-Visit-Judge-Cycle(G, v) = TRUE then
return TRUE
end
end
end
DFS-Visit-Judge-Cycle(G, v)
输入:图 G G G,顶点 v v v
输出:顶点 v v v是否在某环路中
color[v] ← GRAY
for w ∈ G.Adj[v] do
if color[w] = GRAY then
return TRUE
end
if color[w] = WHITE then
pred[w] ← v
if DFS-Visit-Judge-Cycle(G, w) = TRUE then
return TRUE
end
end
end
color[v] ← BLACK
return False
该算法的时间复杂度和深度优先搜索的时间复杂度一致,是 O ( ∣ V ∣ + ∣ E ∣ ) O(|V|+|E|) O(∣V∣+∣E∣)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。