回溯可视化

回溯为递归加上状态恢复规则:作出选择,修改共享状态,向下搜索,返回后按需要撤销改动。递归组织搜索树,撤销让兄弟分支从正确状态开始。

N 皇后占用攻击约束键;全排列把元素交换到固定前缀,再交换回来;数独写入候选数字,检查行、列和宫,子搜索失败后清空该格。

课程比较

课程选择剪枝检查需要恢复的状态输出
N 皇后下一行的一列列或对角线键已占用皇后位置和三个约束键第一个有效棋盘
全排列下一位置的一个剩余元素不同元素的演示不剪枝向前的交换所有位置排列
数独求解器MRV 格子的一个合法数字行、列和 3×3 宫暂填的格子第一个完整解

N 皇后和数独是约束搜索。局部赋值违反规则或已无可满足的候选时,可以跳过整棵子树。全排列则遍历每个叶子,重点是恢复:若省略反向交换,后续分支会从错误数组开始。

建议学习顺序

先学 N 皇后。一枚皇后对应三个约束键,放置时占用,撤销时释放。n = 4 的轨迹在第一个解之前必然经历失败分支。

再学全排列。数组本身保存调用状态,同一交换操作既可推进,也可撤销。观察每轮之前调用者的快照:嵌套的反向交换应恢复调用者原状态,无论子树多深。

最后学数独求解器。MRV 选择合法数字最少的空格,约束矩阵解释候选集合。默认演示中,零候选格让递归撤销三次暂填,才能回到正确的根选择。

观察重点

  • 找到最小可逆改动:一枚皇后及三个键、一次交换或一个格子。
  • 区分拒绝与撤销。被拒绝的候选未进入状态;被撤销的候选曾局部合法,只是在更深处失败,或已完成该分支的枚举。
  • 检查循环边界。下一兄弟选择开始前,调用者应看到原状态。
  • 检查停止规则。N 皇后和数独返回首个解,全排列记录叶子后继续。
  • 区分搜索顺序与有效性。MRV 和从左到右选列改变轨迹及成本,不改变哪些完整赋值有效。

全部回溯可视化课程

进入失败分支,逐步观察高亮代码如何恢复画面中撤掉的状态。