所谓的搜索,就是在解空间里面去找解。

登录以参加训练计划

在状态空间里搜索

状态

在递归中我们讲过参数化的问题分解,即把同一个问题中变化的部分提取到参数中的策略。比如:

  • 汉诺塔中将有多少个盘要搬提取成参数N,那么问题就变成「搬N个盘的步数」
  • 爬楼梯中,把目标的台阶编号提取成参数N,那么问题就变成「爬N级台阶的方法数」
  • 在x个元素的全排列中,把已经选过的元素提取成参数prefix,待选的集合提取成options,待选的数量提取为N,那么问题就变成「在已选prefix的前提下,从options里面选N个的全排列」

这些问题,我们称为状态

转移

这些状态之间可以转移。 比如,根据加法原理,完成一件事可以分成独立的三个步骤,那么总的方法数就是这三个步骤方法数之和。即:搬N个盘的步数 = 搬N-1个盘(从起始柱子到中间柱子) + 搬1个盘(从起始柱子到目标柱子) + 搬N-1个盘(从中间柱子到目标柱子)

这些状态中的一部分,就是原问题的解。比如:

  • 汉诺塔中,当N == 1时
  • 爬楼梯中,N小于某个数时
  • 全排列中,待选的数量为0时

状态空间

当我们把状态看成节点,转移看成边。上述问题就变成了在一张图上找解节点的问题。

于是,图上常用的DFS 、 BFS都能用起来了。

章节 1. 形状即搜索空间

开放

题目 尝试 AC 难度
P490  八皇后 22 4 9
P873  【搜索与回溯】跳马问题(例题) 0 0 (无)
P1166  小数独 1 1 10
 
参加人数
2
创建人