回溯算反的适用场景
需要穷举所有可能性才能得到答案时,一般使用回溯算法。
实际上是一个决策树的遍历过程。
三个要素:
- 路径:已经做出的选择
- 选择列表:当前可以做的选择
- 结束条件:到达决策树底部,无法再做选择时
算法框架
result = []
def backtrack(路径, 选择列表):
if 满足结束条件:
result.add(路径)
return
for 选择 in 选择列表:
做选择
backtrack(路径, 选择列表)
撤销选择 # 总是遗漏
核心:在递归之前做出选择,在递归之后撤销选择。
for 选择 in 选择列表:
# 做选择
将该选择从选择列表移除
路径.add(选择)
backtrack(路径, 选择列表)
# 撤销选择
路径.remove(选择)
将该选择再加入选择列表