深度优先算法和广度优先算法

这篇博客探讨了深度优先算法(DFS)和广度优先算法(BFS)的应用,以一道手机键盘输入问题为例,说明它们在全排列问题中的使用。作者指出,DFS和BFS都需要标记来避免重复访问,并在数据结构和《算法导论》的视角下分别解释了两种算法的实现。此外,还详细介绍了DFS的两种方案及其在二叉树遍历中的应用,以及BFS的层次遍历方法和最短路径查找的特性。
摘要由CSDN通过智能技术生成


今天做了道题目,《手机键盘输入》当按下23时,输出["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]。

其实说白了,也就是全排列问题,将2代表的abc,和3代表的def输出组合的字符。

我是按照普通方法,递归来写的,觉得这道题目也只是考验编程,考验递归的。没太多考虑,当上网看别人都提到DFS(深度优先算法)后,才意识到,是有章法可循的。以前只以为深度优先和广度优先只是在图的遍历的时候才能用到,想不到这些也只是工具,看你怎么去应用到你的算法里面。


好了,不多说了,基于上述原因,参考《数据结构》和《算法导论》将广度优先和深度优先总结一下。


这两个算法的共同点,都是要有标记!数据结构采用的是一个数组来标记每一个结点是否被遍历;算法导论是在结点中附设一个颜色值,来表示遍历的程度。其实质是一样的,都需要借助于标记,来实现。但在二叉树的遍历中就不需要了,因为不会形成回路。


一:深度优先算法

方案一:“数据结构”

其实这是树的先根遍历的扩展。



通过图(b)我们可以看到,v1-v4-v8-v5-v3-v6-v7。

只要遍历到某一个结点,有子节点就先遍历子节点ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值