回溯法可以看成蛮力法的升级版,它从解决问题的所有可能选项里系统地选择出一个可行的解决方案。回溯法非常适合由多个步骤组成
的问题,并且每个步骤
都有多个选项
。当我们在某一步选择了其中一个选项时,就进入下一步,然后又面临新的选项。一直这样重复选择,直至到达最终状态。
用回溯法解决问题的所有选项可以形象地用树状结构
表示。在某一步有n个可能的选项,那么该步骤可以看成是树状结构中的一个节点,每个选项看成树中节点连接线,经过这些连接线到达该节点的n个子节点。树的叶节点对应着终结状态。如果在叶节点的状态满足题目的约束条件,那么我们找到一个解决方法。
如果叶节点的状态不满足约束条件,那么只好回溯到它的上一个节点再尝试其它的选项。如果上一个节点所有可能的选项都已经试过,且不能到达满足约束条件的最终状态,则再次回溯到上一个节点。如果所有节点的所有选项都已经尝试过仍然不能到达满足约束条件的最终状态,则该问题无解。