目录
一、回溯定义
百度百科
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。
其他
从解决问题每一步的所有可能选项里系统选择出一个可行的解决方案。
在某一步选择一个选项后,进入下一步,然后面临新的选项。重复选择,直至达到最终状态。
回溯法解决的问题的所有选项可以用树状结构表示。
- 在某一步有n个可能的选项,该步骤可看作树中一个节点。
- 节点每个选项看成节点连线,到达它的n个子节点。
- 叶节点对应终结状态。
- 叶节点满足约束条件,则为一个可行的解决方案。
- 叶节点不满足约束条件,回溯到上一个节点,并尝试其他叶子节点。
- 节点所有子节点均不满足条件,再回溯到上一个节点。
- 所有状态均不能满足条件,问题无解。
二、回溯模板
三部曲:
- 递归函数的返回值以及参数
在这里要定义两个全局变量,一个用来存放符合条件单一结果,一个用来存放符合条件结果的集合。
- 回溯函数终止条件
- 单层搜索的过程
回溯法的搜索过程就是一个树型结构的遍历过程,for循环用来横向遍历,递归的过程是纵