下面是 DFS 的通用代码,带有用于标记后边缘和树边缘的逻辑。我的疑问是来自顶点的后边返回并指向祖先,而指向父节点的后边不是后边(让我们假设无向图)。在无向图中,我们在 2 个顶点 x 和 y 之间来回有一条边。因此,在我处理 y 时访问 x 后,y 将 x 作为相邻顶点,但由于它已经被访问过,代码会将其标记为后边缘。
我这样说对吗?如果我的假设有效,我们是否应该添加任何额外的逻辑来避免这种情况?
DFS(G)
for v in vertices[G] do
color[v] = white
parent[v]= nil
time = 0
for v in vertices[G] do
if color[v] = white then
DFS-Visit(v)
Induce a depth-rst tree on a graph starting at v.
DFS-Visit(v)
color[v]=gray
time=time + 1
discovery[v]=time
for a in Adj[v] do
if color[a] = white then
parent[a] = v
DFS-Visit(a)
v->a is a tree edge
elseif color[a] = grey then
v->a is a back edge
color[v] = black
time = time + 1
白色表示unexplored
,灰色表示frontier
,黑色表示processed