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,它的边是bcd,我们将从b开始,然后,当我们最终返回a时,我们将转到c(如果它还没有被访问过),然后在第二次返回d之后,我们将类似地转到a
它叫depth-first search,以防你想知道。维基百科还提供了一个在树中探索顶点的顺序示例:(数字对应于访问顺序,我们从1开始)
在上面,您不仅要探索沿着左侧向下(1-4)的顶点,而且在4之后,您返回到3访问5,然后返回到2访问6,依此类推,直到访问完所有12个顶点。
关于previsitpostvisit-previsit将在我们第一次到达顶点时发生,postvisit将在我们探索了它的所有子代(及其在相应dfs树中的子代)之后发生。因此,在上面的示例中,for1previsit将在开始时发生,但是后期访问将仅在结束时发生,因为所有顶点都是1的子节点或这些子节点的子节点。订单内容如下:
前1,前2,前3,前4,后4,前5,后5,后3,前6,后6,后2。。。

关于algorithm - 该图伪代码的功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23963113/

10-11 03:47