回溯法 回溯法英語backtracking是暴力搜尋法中的一种 对于某些计算问题而言回溯法是一种可以找出所有或一部分解的一般性算法尤其适用于約束滿足問題在解决约束满足问题时我们逐步构造更多的候选解并且在确定某一部分候选解不可能补全成正确解之后放弃继续搜索这个部分候选解本身及其可以拓展出的子候选解转而测试其他的部分候选解 在经典的教科书中八皇后问题展示了回溯法的用例八皇后问题是在标准国际象棋棋盘中寻找八个皇后的所有分布使得没有一个皇后能攻击到另外一个 回溯法采用试错的思想它尝试分步的去解决一个问题在分步解决问题的过程中当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候它将取消上一步甚至是上几步的计算再通过其它的可能的分步解答再次尝试寻找问题的答案回溯法通常用最简单的递归方法来实现在反复重复上述的步骤后可能出现两种情况 找到一个可能存在的正确的答案 在尝试了所有可能的分步方法后宣告该问题没有答案 在最坏的情况下回溯法会导致一次复杂度为指数时间的计算