回溯一般在递归底下,是一个纯暴力的搜索
解决的问题
- 组合问题(集合组合无序)
- 切割问题
- 子集问题(选择或不选择 4个数的子集)
- 排列问题(有顺序)
- 棋盘问题(N皇后 解数独)
抽象成树形结构
因为回溯是一个递归 的过程,递归是有终止的。树的深度是递归,宽度是目标集合的大小 (for循环)
模版
def backtracking(参数):
if 终止边界:
收集结果
return
# 单层搜索
for 集合元素:
处理节点
递归
回溯操作,撤销处理
初始
return