procedure explore(G; v)
Input: G = (V;E) is a graph; v 2 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) 2 E:
if not visited(u): explore(u)
postvisit(v)
这些伪代码所做的就是找到一条路对吗如果我没有错的话,它在回溯的时候什么也做不了?
最佳答案
它只是探索图形(它不返回路径)-从起始顶点可到达的所有内容都将被探索,并在visited
集中具有相应的值(而不仅仅是对应于其中一条路径的顶点)。
它会在回溯时移动到下一个边它确实postvisit
。
因此,如果我们在a
,它的边是b
,c
和d
,我们将从b
开始,然后,当我们最终返回a
时,我们将转到c
(如果它还没有被访问过),然后在第二次返回d
之后,我们将类似地转到a
。
它叫depth-first search,以防你想知道。维基百科还提供了一个在树中探索顶点的顺序示例:(数字对应于访问顺序,我们从1
开始)
在上面,您不仅要探索沿着左侧向下(1
-4
)的顶点,而且在4
之后,您返回到3
访问5
,然后返回到2
访问6
,依此类推,直到访问完所有12个顶点。
关于previsit
和postvisit
-previsit
将在我们第一次到达顶点时发生,postvisit
将在我们探索了它的所有子代(及其在相应dfs树中的子代)之后发生。因此,在上面的示例中,for1
,previsit
将在开始时发生,但是后期访问将仅在结束时发生,因为所有顶点都是1
的子节点或这些子节点的子节点。订单内容如下:
前1,前2,前3,前4,后4,前5,后5,后3,前6,后6,后2。。。
关于algorithm - 该图伪代码的功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23963113/