回溯算法小总结
「回溯算法」根据当前决策有多少种选择,对应了两套模板。
模板一:输入的视角(选 or 不选)
每一次独立的决策只对应 选择 和 不选 两种情况:
- 确定结束回溯过程的 base case
- 遍历每个位置,对每个位置进行决策(做选择 -> 递归 -> 撤销选择)
1 | void dfs(当前位置, 路径(当前结果), 结果集) { |
模板二:答案的视角(枚举当前选择的结束位置)
每一次独立的决策都对应了多种选择(通常对应了每次决策能选择什么,或者每次决策能选择多少个 …):
- 确定结束回溯过程的 base case
- 遍历所有的「选择」
- 对选择进行决策 (做选择 -> 递归 -> 撤销选择)
1 | void dfs(选择列表, 路径(当前结果), 结果集) { |