Graph DFS遍历迭代

Graph DFS遍历迭代,graph,iteration,traversal,depth-first-search,Graph,Iteration,Traversal,Depth First Search,我试图理解DFS递归和DFS迭代之间的区别。在这个问题中,邻域按字母顺序迭代 使用DFS递归,我得到A、C、D、E、F。但是,我不了解DFS迭代遍历的过程。我的教授说,使用DFS迭代法,应该得到E D C F。有人能指引我正确的方向吗 下图:对于一个图,可以有不止一种方法使用DFS从同一个源开始遍历节点。 例如,以表示为邻接列表的图形为例。它可以是: B: A A: C, D, E C: D, E, F F: D 或 两者都是有效的陈述。 但是,如果您按照尾部在邻居列表中出现的顺序选择尾部来实

我试图理解DFS递归和DFS迭代之间的区别。在这个问题中,邻域按字母顺序迭代

使用DFS递归,我得到A、C、D、E、F。但是,我不了解DFS迭代遍历的过程。我的教授说,使用DFS迭代法,应该得到E D C F。有人能指引我正确的方向吗


下图:

对于一个图,可以有不止一种方法使用DFS从同一个源开始遍历节点。 例如,以表示为邻接列表的图形为例。它可以是:

B: A
A: C, D, E
C: D, E, F
F: D

两者都是有效的陈述。
但是,如果您按照尾部在邻居列表中出现的顺序选择尾部来实现它,第一个将导致:A->C->D->E->F,而第二个将导致A->E->D->C->F。这两个都是有效的遍历。

就运行时间而言,两者大致相同

如果有什么区别的话,使用迭代DFS应该会稍微快一些,因为递归函数返回时不必返回堆栈帧

为了回答您的问题,递归DFS不使用堆栈,而迭代DFS使用堆栈。因此,递归DFS将查看所有邻居,如果还没有找到邻居,则立即执行DFS。这就是为什么顺序是A,C,D,…,等等。对于迭代DFS,它使用堆栈,因此将首先遍历最后存储的节点。因为我们是按字母顺序排列的,所以E将存储在最后,所以它将首先从A开始遍历,然后是D,C,依此类推

B: A
A: E, D, C
C: F, D, E
F: D