DFS--回溯思想

我将DFS的题目归结为几个注意点。

第一就是要注意边界和结束条件,边界就是不符合条件的,比如数组的越界等等。结束条件就是什么时候已经成功了,也就是达到题意了。

第二就是剪枝,剪枝就意味着要对走过的点和改变的数据做处理。

第三就是回溯,有的题目一定要回溯,但是有的题目不用回溯,选择不回溯反而是优化算法的关键。

第四就是注意遍历的顺序,比如每一步有几种选法,再比如每一步有几种方向。

经典例题分析:

① 全排列问题          https://ac.nowcoder.com/acm/problem/15128

此题较易,注意点就是剪枝加回溯。

② N皇后问题           https://ac.nowcoder.com/acm/problem/235813

此题的关键体现在遍历的顺序,可以一个一个格子的遍历,每一个格子有两种可能,放或者是不放,如果数据少还好,但是如果数据一大就不行了。

第二种遍历方式是每一行有且仅有一个皇后,因此就可以转换为对每一行的遍历。

此题还有一个关键就是正对角线和反对角线的表示,正对角线和反对角线的斜率分别都是相等的,就看y=kx+b中的b了,然后如果b小于0,就可以加一个偏移量,避免下标为负数的。

③ 马踏棋盘                 https://ac.nowcoder.com/acm/problem/235814  

这个题不要被题意误导,因为在坐标系下(x,y)对应的是(j,i)

④ 数独挑战                 https://ac.nowcoder.com/acm/problem/24911

此题较易

⑤ 幸运数字                 https://ac.nowcoder.com/acm/problem/15291

此题需注意数据是很大的因此可以先将所有的幸运数字构造出来,然后再用巧妙的方法来计算,

而不是用暴力的方法来算哦。然后在线段的处理的时候要小心,特别要注意在同一区间内。

⑥奶酪                         https://ac.nowcoder.com/acm/problem/16417

此题不用回溯,因为此点到不了终点就是到不了终点,就不用再考虑了。

⑦wyh的迷宫               https://ac.nowcoder.com/acm/problem/15434

此题不用回溯,因为此路不通,则无论怎样此路都是不通的哦。

⑧Lake Counting        https://ac.nowcoder.com/acm/problem/24739

dfs也不回溯

此题可以用dfs亦可以用bfs来做,就是求连通分支的个数呗。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值