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


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

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

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


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


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


一:深度优先算法

方案一:“数据结构”

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



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

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

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值