最近刚好学到了图的深层优先遍历(DFS),发现了一些误区,比如“Skiena's Algorithm Design Manual 第 169页; Jeff Edmonds' How to Think about Algorithms, 第 175–178页; Gilberg and Forouzan Data Structures: A Pseudocode Approach Using C, 第 497页。”
包括维基百科中也出现了同样的错误,也就是直接将广度优先遍历(BFS)中的queue直接替换成了stack,显然会出现一些问题。
https://11011110.github.io/blog/2013/12/17/stack-based-graph-traversal.html
这个网站中指出了这些问题。
简单概括:把queue直接替换成stack会先访问一些(如果使用DFS)应该在后面访问的节点。
BFS(s)
{for( each vertex v){
flag(v) = false}//flag用于标记已经访问过的顶点。先全部标记为false
queue q;
q

本文详细介绍了图的深度优先遍历(DFS)和广度优先遍历(BFS)的原理,指出将BFS的队列直接替换为栈在DFS中的错误,并通过实例展示了两种遍历方法的正确实现。同时,解释了DFS的循环嵌套递归特性,以及如何使用栈模拟DFS过程。
最低0.47元/天 解锁文章
1万+





