![]() |
1
6
来自 Berkeley CS Course Solution
@dtldarek的另一种方法 math.stackechange :
|
![]() |
2
4
一旦你了解了BFS和DFS以及它们之间的基本区别,证明就非常简单了。 BFS与DFS dfs和bfs的主要区别在于它们如何从根开始构建树。不同之处在于 当访问一个顶点时,如何访问相邻顶点 。让我们用一种简单的方式处理每个遍历1乘1。 1.BFS(高炉) 1.BFS从访问根开始。 然后,它访问距离根1条边的顶点。 假设有4个顶点a、b、c、d与根相邻。然后,bfs将在访问根之后访问这4个顶点。 2.完成bfs后,访问距根1条边的顶点。然后需要 第一个顶点 在root之后访问并重复相同的过程。哪个顶点是第一个顶点,这由处理 队列数据结构。 这就是为什么在使用BFS遍历树时,它也称为级别顺序遍历。因为它逐级访问顶点 在树的情况下,级别是明确定义的。 DFS公司 1.DFS从访问根目录开始。访问根之后,它不会访问与根相邻的所有顶点,但会深入到图形的深度。 2.一旦访问根,它只访问与根相邻的顶点,然后将从该顶点本身开始dfs,也就是说,在访问与根邻接的所有顶点之前,它会深入。只有在访问了启动dfs的方向的深度顶点后,才会出现这种情况。 值得注意的是,BFS以“自顶向下”的方式构建树,而DFS以“自下而上”的方式创建树 如果这两棵树是相同的,那么当你的图本身是树的时候就是这样。树只能是特殊的两种类型。 这只适用于这样的斜树图形:
在这种情况下,bfs和dfs都朝一个方向。 或者一个星形拓扑图,如下所示:
证明人声明 与上述两棵树不同的任何其他树都将类似于中间顶点v存在于级别x,并且它在级别x+1上有1个以上的子节点(例如2个)c1和c2。bfs将访问v,然后访问c1和c 2,但dfs将访问v、c1,然后访问c 1的子节点,所以很明显,在这两种情况下,遍历将不同。 |
![]() |
Rosie Lomas · 在ggplot中设置数字刻度 1 年前 |
![]() |
nedlaback · 在O(V+E)图中寻找瓶颈边 6 年前 |
|
Skampak · R visNetwork:创建新类型的边 6 年前 |
![]() |
Anuja · 长度l在R中的最短路径 6 年前 |
![]() |
Cbhihe · 优化Neo4j查询,有条件地创建新关系 6 年前 |
![]() |
fghjk · 绘制轨迹(python) 6 年前 |
![]() |
LBerger · 计算图形图像中的名称使用(TensorBoard) 7 年前 |