搜索入门题单
从递归枚举、回溯剪枝到 DFS、BFS 和网格搜索,建立搜索建模与状态去重的基础。
搜索入门题单
搜索题的重点不是把递归写出来,而是明确三件事:状态是什么、下一步有哪些选择、什么时候可以剪枝或判重。
建议每道题都先写出最直接的搜索,再记录搜索树的规模和重复状态,最后说明优化消除了哪一部分重复。
一、递归与枚举
先练习把“选择一个对象”翻译成递归层,把“不能重复或必须满足条件”写成约束。
二、网格 DFS 与连通块
网格题是图搜索最直观的入口。先把四联通、八联通和边界条件写清楚,再考虑是否需要标记数组。
- luogu P1451洛谷原题
- luogu P1141洛谷原题
- atcoder ABC007C未收录
- atcoder ABC088D未收录
三、BFS 与最短步数
当每次移动代价相同时,BFS 的层数就是最短距离。要特别注意起点入队时机和第一次到达状态的含义。
- · P3956 棋盘
四、搜索建模与剪枝
这一组开始出现状态压缩、传送、带代价移动和搜索顺序。不要一开始就套模板,先画出状态图。
复盘要求
每道题完成后补充:
text
状态由什么组成:
每次搜索有哪些选择:
是否存在重复状态:
剪枝条件为什么正确: