DFS深度优先搜索

DFS的主要思想

DFS深度优先搜索通过不断递归向后深入,当出现当前情况不满足条件或不是最优情况时回到上一步继续向后递归,最终遍历所有元素。

DFS的实现

DFS主要通过递归来实现,即
1.递归的定义 创建DFS函数
2.递归的拆解 通常在一个for循环中 进行条件判断 元素的添加 DFS递归 元素的删除
3.递归的出口 即当已找到符合条件的组合 进行回溯

DFS的应用

在这里插入图片描述
以上题目已用java实现

总结

DFS由于会对每个元素的每种可能都进行递归遍历,所以通常用来找所有可能的方案与组合,少数情况用于找最优解(通常为动态规划)。在数字组合问题中,由于DFS会取所有满足条件的组合,当出现重复数字时,会出现重复组合,这时就要进行条件判断,即只能优先取前面的重复数字。在一些问题中对组合的划分可以用切割来解决,即找到所有的切割方案,同样是利用DFS去遍历所有可能。DFS在一些问题中,单独无法进行对当前组合是否为最优的判断,可能需要结合BFS去解决问题,即先用BFS遍历为图中每个元素设置一个变量,在DFS中通过对变量的比较判断是否进行了最优的组合。一些问题可以将其看成图,然后通过DFS来解决。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值