浅谈图的深层优先和广度优先遍历(栈实现,循环内层嵌套递归实现)(c++)

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

最近刚好学到了图的深层优先遍历(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
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值