![]() |
1
3
虽然最终结果(路径)可能是相同的,但bfs和dfs(不是发布的特定实现)之间的根本区别在于搜索机制。
通过观察代表探测节点的灰点,可以看到bfs的性质,它类似于洪水。
|
![]() |
2
2
第一种方法根本不是DFS,至少在DFS算法的规范定义中是这样。它只是BFS,其中有人用堆栈替换队列。然而,这种实现足以“模拟”DFS,从某种意义上说,它可以按类似DFS的顺序发现图顶点。它可以被称为“伪DFS”,如果你愿意的话,因为DFS类似于发现顺序,但是规范的DFS算法远不止这些。 回溯 顺序(即 "gray" vertex becomes "black" vertex 同时,第二种方法是经典DFS算法的显式递归实现。 在任何情况下,无论是真df还是伪df,都不存在访问顶点的“一个真实顺序”。两种实现都可以产生相同的顶点访问顺序。在你的情况下,没有人会费心去确保这一点。输出的差异是由前一个实现访问中的邻居这一简单事实造成的 颠倒 顺序-从最后到第一。所有的邻居首先被推到一个堆栈中,然后一个接一个地弹出以供访问。堆栈的后进先出行为是产生反转的原因。同时,后一种实现方式是访问他们家乡的邻居 向前地 顺序-从头到尾。 如果将后一个实现中的循环替换为
在两个实现中,您应该得到相同的访问顺序(相同的输出)。 |
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |