回溯与 BFS/DFS
回溯(Backtracking)、深度优先搜索(DFS)、广度优先搜索(BFS)是图/树/搜索类问题的三大核心范式。它们共享一个本质:在状态空间里搜索所有可行解或最优解,差别在于搜索方式与剪枝策略。
三者关系
| 范式 | 本质 | 适用场景 | 实现方式 |
|---|---|---|---|
| 回溯 | DFS + 撤销选择 | 枚举所有排列/组合/子集 | 递归 + 选择/撤销 |
| DFS | 一条路走到底再回头 | 连通性、拓扑、路径 | 递归或栈 |
| BFS | 一层一层向外扩 | 最短路径(无权)、层序 | 队列 |
回溯本质就是 DFS,只是强调"做选择 + 撤销选择"这两个动作;DFS 强调遍历方式。回溯常用于解空间是树形(决策树)的问题。
一、回溯框架
回溯的核心是"决策树遍历":在每个节点做出选择,递归深入,然后撤销选择回溯到上一层,尝试其他选择。这保证了 path 在递归过程中被复用,不创建新数组。
通用模板
function backtrack(path: number[], choices: number[]): void {
if (