计算机如何解数独
更新于 2026-10-05
回溯法
求解器在空格中尝试填入一个符合规则的数字,然后继续。如果没有任何数字能通向解答,它就撤销之前的某个选择,再尝试其他数字。优先选择可填数字最少的格子,往往能大幅缩短搜索过程。
来源: Wikipedia: Sudoku solving algorithms, Peter Norvig: Solving Every Sudoku Puzzle
精确覆盖与舞蹈链
数独可以改写为精确覆盖问题:选择数字的填入位置,使每个格子,以及每一行、每一列和每一宫中的每个数字,都恰好被覆盖一次。在2000年11月的一篇论文中,唐纳德·克努特介绍了舞蹈链,这是高效执行其回溯算法X的一种方法;将它应用于数独的精确覆盖模型,可以快速找出一道题的所有解。
来源: Wikipedia: Sudoku solving algorithms, Knuth, Dancing links (arXiv cs/0011047, 2000)
随机搜索
有些程序先随机填满网格,再调整数字位置以减少冲突,采用的方法包括模拟退火或遗传算法。这些方法已作为替代方案受到研究;其效果取决于具体程序和题目。
来源: Wikipedia: Sudoku solving algorithms
模拟人类思路的求解器
提示引擎的任务有所不同:不仅要找出答案,还要展示人能够理解并执行的下一步。我们应用中的引擎按固定顺序尝试人类解题技巧,从隐性唯一数等最简单的技巧,到链和近锁定集等最难的技巧,并使用第一个能让它填入数字的技巧;较难的技巧会先排除候选数。引擎在一道题中使用的最难技巧,决定了该题在应用中的难度等级。
来源: 数独各难度需要你掌握哪些技巧