DFS+回溯

DFS+回溯

介绍

回溯就是对一个问题的所有可能结果进行搜索的一种方法,通过深度优先遍历的思想来实现。本质上回溯算法就是一种遍历算法,它会搜索得到一个问题的所有解,时间复杂度很高。
对于所有可能的情况,我们一种一种的去尝试(一般按照顺序来枚举,这样保证每一个情况都能搜索到)如果是我们想要的结果就放到结果集中。另外,在满足某些条件的时候可以进行剪枝。一般都是将这种问题转换成一个树形结构来进行分析。既然是树形结构,就要知道
1.每个节点中是什么:可以根据节点中的值来判断是否要加index,来表示下一次从哪里开始遍历
2.每条路径上是什么:使用了什么
3.如何产生树的分支:满足什么条件的时候可以直接剪枝,一些搜索可以直接排除,就不用画这个分支了,一般重复问题要考虑下。
4.树结构有几层:到什么时候搜索截止,dfs中的i如何变化,是i+n,还是i保持不变
5.遍历这个节点之后是继续还是回退:回溯,这个点遍历结束要回到上一个分叉点,那状态就要重置,需要设定为和上一次一样。
6.记录该节点是否访问过:visit记录下这个节点后面还需要用到吗。

做题的时候:

对于树形图,思考清楚:题目需要的解是在叶子节点、非叶子节点还是根节点到叶子节点的路径。
模板:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值