Skip to content
难度基础(★)
建议时长45分钟

14.3.6 回溯法

回溯法是在解空间中按深度优先方式尝试选择;如果当前选择导致不满足约束,就撤销选择,退回上一层继续尝试其他分支。

回溯的基本过程

mermaid
flowchart TD
  A["选择一个候选"] --> B{"满足约束?"}
  B -->|是| C{"形成完整解?"}
  C -->|是| D["记录解"]
  C -->|否| A
  B -->|否| E["撤销选择,回退"]
  E --> F["尝试下一个候选"]
  F --> A

关键词

关键词对应含义
解空间树所有可能选择形成的树
约束条件当前选择是否合法
剪枝提前排除不可能成功的分支
回退撤销当前选择,返回上一层

典型问题

问题回溯体现
八皇后逐行放皇后,冲突则撤销
迷宫问题尝试方向,走不通回退
子集/排列枚举选择或不选择,逐层展开
0-1 背包穷举版对每个物品选/不选,超重剪枝

与贪心、动态规划的区别

策略是否尝试多分支是否回退
贪心通常只走一个当前最优分支不回退
动态规划比较多个状态,但用表保存不按路径回退
回溯尝试多个候选分支失败就回退

本节例题

单选
回溯法的典型特征是:

自查清单

  1. 能否解释“解空间树”是什么意思?
  2. 能否说明剪枝为什么能减少搜索量?
  3. 能否区分回溯和贪心的决策方式?