回溯法个人觉得最重要的两点:
第一点.终止条件
第二点.恢复操作
如果能明白这两点,那么其他代码的编写可以说是大同小异了
解决一个回溯问题,实际上就是一个决策树的遍历过程。
1、路径:也就是已经做出的选择。
2、选择列表:也就是你当前可以做的选择。
3、结束条件:也就是到达决策树底层,无法再做选择的条件。
标准的可以用回溯法解决的问题有全排列问题以及N皇后问题,能掌握这两道题目,基本对于回溯的理解就差不多了
for 选择 in 选择列表:
# 做选择
将该选择从选择列表移除
路径.add(选择)
backtrack(路径, 选择列表)
# 撤销选择
路径.remove(选择)
将该选择再加入选择列表