阶段学习总结--搜索(1)

学校开始上网课,效率比平时低了很多(虽然这两者没有必然的因果关系),工作日比平时时间利用率上低了很多,基本没怎么学,到周末写博客时才发现没东西可以写。于是趁着最后一天做了几道搜索例题,对在停留在理解层面的dfs有了一定的应用能力。

先说dfs中的n排列数字问题(活动 - AcWing

反复咀嚼,当遇到需要一条路走到底的情况时,用dfs十分适用,dfs的使用主要在以下几个方面:搜索结束条件,设置bool数组标记是否使用过,递归时的回溯问题(如恢复bool数组的标记)。最关键的还是对递归的理解。

再说dfs中n皇后问题(活动 - AcWing

相比n排列,多了剪枝的问题,对递归回溯也得出了模板式的结论。剪枝:一条路走到黑,当一点走不通的时候,其子点直接全部放弃不再讨论,再走下一条路。代码实现表现为多加一组判断条件。递归回溯:

        row[x] = col[y] = dg[x + y] = udg[x - y + n] = true;
        g[x][y] = 'Q';
        dfs(x, y + 1, s + 1);
        g[x][y] = '.';
        row[x] = col[y] = dg[x + y] = udg[x - y + n] = false;

可以看出,递归前后是对称的。递归前,将满足条件的进行标记,递归完成后回溯,即恢复(删除)标记。

最后总结一下,dfs深度优先搜索,分析题目,是否可以用树状的逻辑理解,若可以,再看是否符合一条路走到底的思想,若可以,就用dfs。根据题意构思递归结束条件、剪枝条件、标记递归回溯问题。重点还是在于剪枝方面。

这周学的东西真的挺少,写总结博客应该也是一种自我反思,调整状态,及时止损的方法。

懒,赖,还有仨字忘了..单这俩字就在这周体现的淋漓尽致。下周不能再继续下去了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值