procedure explore(G,v)
Input: G=(V,E) is a graph; v ∈ V
Output: visited(u) is set to true for all nodes u reachable from v
visited(v) = true;
previsit(v)
for each edge (v,u) ∈ E:
if not visited(u): explore(u)
postvisit(v)
重写探索过程(上图),使其非递归(即显式使用堆栈)。应该定位对 previsit 和 postvisit 的调用,以便它们具有与递归过程中相同的效果。
解决方案:
procedure explore(G; u)
S = (empty stack)
push(S, u)
while S is not empty:
v = top(S)
if not visited[v]:
visited[v] = true
previsit(v)
if there is an edge (v; w) ∈ E with visited[w] = false:
push(S, w)
else: (we're done with v, the node at the top of the stack)
pop(S)
postvisit(v)
有人可以帮我理解这个伪代码吗,我不确定 Stack 在这种情况下是如何工作的。有人可以带我看一下这段代码,以便我了解它是如何工作的