基础DFS总结


一、基础DFS模板

bool check(参数)
{
    if(满足条件)return true ;
    else       return false;
}
void dfs(int step)
{
        判断边界
        {  相应操作 }
        
        尝试每一种可能
        {
               满足check条件
               标记
               继续下一步dfs(step+1)
               恢复初始状态(回溯的时候要用到)      }
}

典例

1,N1318 自然数拆分
2,P1219 八皇后

DFS函数内部注意事项:

1.形参!!!

DFS的形参需要具有一定的主动改变性质,在输出的时候会用与循环
1.DFS的形参需要与递归终止条件,建立某种联系
2. 基本上对于任何DFS的回溯都需要使用顺序形参,方便回溯和逐位更改

2.函数内部

去重去重去重去重!!!!!!!!重要的事情说N遍
1.在DFS 函数内第一步,对可能出现的结果进行枚举,在与最外层循环利用数组下标,对操作进行枚举
2.第二步,结合边界条件进行判断,主要用到的有桶去重理论,数组越界问题(二维)
3. 对于通过第一层分支筛选条件的数据储存并后续利用
4,若变量达成某条件,值更新并进行目标操作(如输出,计数增加)
5. 若未达成条件,可以进行增序递归(下解释!!!)
6.回溯的过程中,需要对全局变量进行的任何改动进行复原,对于局部变量可以免除修改 (部分)

注意:

1.所谓主动改变,是在函数内调用递归函数的过程中进行改变

2.在判断最大值或最小值的过程中,无需变量达成某终态,增序递归始终不停止

3.巧妙处理,数组越界的方法就是增加虚拟边界

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流苏贺风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值