1
3
虽然最终结果(路径)可能是相同的,但bfs和dfs(不是发布的特定实现)之间的根本区别在于搜索机制。
通过观察代表探测节点的灰点,可以看到bfs的性质,它类似于洪水。
|
2
2
第一种方法根本不是DFS,至少在DFS算法的规范定义中是这样。它只是BFS,其中有人用堆栈替换队列。然而,这种实现足以“模拟”DFS,从某种意义上说,它可以按类似DFS的顺序发现图顶点。它可以被称为“伪DFS”,如果你愿意的话,因为DFS类似于发现顺序,但是规范的DFS算法远不止这些。 回溯 顺序(即 "gray" vertex becomes "black" vertex 同时,第二种方法是经典DFS算法的显式递归实现。 在任何情况下,无论是真df还是伪df,都不存在访问顶点的“一个真实顺序”。两种实现都可以产生相同的顶点访问顺序。在你的情况下,没有人会费心去确保这一点。输出的差异是由前一个实现访问中的邻居这一简单事实造成的 颠倒 顺序-从最后到第一。所有的邻居首先被推到一个堆栈中,然后一个接一个地弹出以供访问。堆栈的后进先出行为是产生反转的原因。同时,后一种实现方式是访问他们家乡的邻居 向前地 顺序-从头到尾。 如果将后一个实现中的循环替换为
在两个实现中,您应该得到相同的访问顺序(相同的输出)。 |
Tony Hellmuth · 求矩阵中最大连通区域的大小 6 年前 |
Rxzlion · Python-回溯迷宫生成递归函数理解 6 年前 |
Salmaan P · 在python中优化DFS 7 年前 |
ssharma · 平衡二叉树上预序和DFS的时间复杂度相同吗? 7 年前 |
101ldaniels · DFS发现和完成时间 8 年前 |
Ankit Mishra · 图与BFS和DFS树的等价性 8 年前 |
MJM · 使用DFS计算Java中5x5场地上可能的骑士移动 8 年前 |