数独求解器最常被用来干两件事:把卡住的题推下去,和验一道题合不合格。两件事都会撞上同一组判定结果——唯一解、多解、无解、有重复。这四个词看着像难度评价,其实说的是四件完全不同的事。
唯一解为什么是硬标准
数独是逻辑推理题,不是「找一组可行填法」。这个定位决定了唯一解不是加分项而是及格线:
- 唯一解的题:每一步都能问「这一格必须是什么」,答案由已知信息唯一确定,整个过程可以纯逻辑推进
- 多解的题:某些格子有两种以上合法填法,你只能任选一种——那一刻做的是猜
所以多解题不是「难题」,是废题。它给不出「为什么是这个数字」的理由,做完也无从验证——答案页只会印其中一种,你填的那种可能同样合法却和答案不一样。
值得补一句:好题的标准其实比唯一解更高,还应该能用人类技巧推出来。唯一解可以靠回溯搜索验证,但那条路机器能走、人走不了——有些唯一解题目对人来说仍然只能靠试。工具的「下一步」推不动时会明说,这正是在区分这两个层次。三招基本功各自是什么,见数独三招基本功。
多解通常是挖出了「致命矩形」
自己出题时判多解,最常见的原因是一个很具体的结构。
两个数字 a、b 落在两行两列交叉出的四个格子上,并且这四格只跨两个宫——此时把四格全挖空,a 和 b 可以在里面互换:
c1 … c4
r1 a b ←──┐
│ 交换成
r2 b a ←──┘
c1 c4
r1 b a
r2 a b
交换后行里还是各有一个 a 一个 b、列里也是、两个宫里也是——三个约束全都照旧成立,于是至少两个解。
「只跨两个宫」这个条件是必要的:如果四个格子分散在四个不同的宫里,交换会让某个宫多出一个重复数字,结构就不成立。
挖空时的铁律:这四格不能全空,至少留一个。
反过来,解题时可以利用这个性质——如果四个格子的候选都恰好是同两个数字 {a,b},说明题目必然多解;而合格题不该多解,于是可以据此排除某个候选。这就是进阶技巧里的唯一矩形(unique rectangle)。
其它多解来源还有:挖空后某个数字在整块区域里完全自由;追求对称美观的挖法一次去掉了太多约束。验证办法只有一个——挖完就丢进求解器看解的情况。
无解和有重复:矛盾在现在还是在未来
这两个状态最容易混,但排错方式完全不同。
| 有重复 | 无解 | |
|---|---|---|
| 性质 | 显式矛盾 | 隐式矛盾 |
| 表现 | 同行/列/宫已有两个相同数字 | 已填数字互不重复,但继续填必然走到死路 |
| 定位 | 工具直接标红,一眼看到 | 现场看不出错在哪 |
| 典型原因 | 抄题错位(漏一格导致整行左移) | 自己推的某一步用错了排除 |
无解的回溯步骤:
- 先分清哪些是原本的已知数、哪些是你自己推的——工具里你输入的数字保持粗体,算出来的用主题色标示
- 重点查自己推的那几个,尤其最近填的三五个
- 把可疑的几个擦掉再求解——如果变成唯一解,说明擦掉的那几个里有错的
- 如果把自己填的全擦掉、只留原始已知数还是无解,那就是抄题抄错了,回去核对题面
一条经验:无解绝大多数出在「自己推的数字」上,题目本身无解很少见(除非抄错)。
两个著名的数字
17 格下限。2012 年 McGuire、Tugemann、Civario 用穷举搜索证明了16 个已知数不可能有唯一解——他们把问题转化为检查所有可能的「不可避免集」组合,用大规模计算跑完全部情况。所以唯一解数独的已知数下限就是 17;17 格的题目已经收集到数万个,都属于极难类型。
盘面总数。完整填好的 9×9 终盘共有 6,670,903,752,021,072,936,960 种(Felgenhauer 与 Jarvis 2005 年算出);把旋转、镜像、数字重命名等对称变换视为同一个之后,约 54.7 亿 个本质不同的终盘。
这两个数字有三个实用推论:
- 低于 17 格的题一定多解,可以直接判废
- 看到「只有 20 个数字的超难题」不必被格数吓到——已知数个数不等于难度
- 随机生成永远不会重复,不用担心刷到同一题
难度评估的口径
工具按解完全程所需的最深技巧分级,不数已知数:
| 评估 | 判据 |
|---|---|
| 入门 | 只用得上唯余法 / 排除法 |
| 困难 | 必须用到区块排除 |
| 专家 | 这三招推不到底,需要数对、X-Wing 或链 |
这个口径比数格子可靠得多——24 个已知数的题可能一路顺推,30 个的反而可能凶。评估结果只反映卡不卡,和你实际花多久没有必然关系。
「专家」这一档还有一层含义:求解按钮仍然给得出完整答案(那条路走的是回溯搜索,不受技巧限制),只是没法把每一步讲成人话。所以看到「下一步推不出来」不代表题目有问题,只代表它超出了三招的覆盖范围。
出题的实用顺序
如果你在自己出题,下面这个顺序比「挖完再验」省事得多:
- 随机生成一个完整终盘
- 随机顺序逐格试挖
- 每挖一格都验一次「剩下的盘面仍能只靠目标技巧推完」,不满足就把数字放回去
- 挖到目标已知数个数、或者挖不动为止
关键在第 3 步:判据用「能推完」而不是「唯一解」。前者比后者更强——能一路推到底,自然只有一个解——所以唯一解是顺带保证的,而且额外得到了「不需要猜」和「每一步都讲得出理由」这两个性质。数独的四档难度就是这么生成的,判据分别是两招和三招。
反过来,只验唯一解的出题程序会放出一些人类推不动的题,这就是外面的题偶尔需要链的原因。
输入的几个省事细节
- 键盘:方向键移动、
1–9填数、Backspace擦除、Enter求解。81 格通常一分钟内敲完 - 再按一次同一个数字即擦除——改题时比找 Backspace 快
- 粘贴:81 位单行串最常见,
.0_*都当空格;换行、空格、|和---分隔线会被忽略,所以从网页或聊天窗里复制的 9 行盘面一般都能直接读入
不做照片识别是有意的:走服务端识别就要上传题面,而求解、判定、评估全在你的浏览器里跑完是这个工具的前提;走浏览器内识别则要拉进一个几十兆的模型,为省一分钟输入让每个人先下载几十兆不划算。变体也暂不支持(对角线数独、杀手数独、锯齿数独各有额外约束和自己的一套技巧命名),只做标准 9×9。
要验题或者把卡住的题推下去:数独求解器全程本地计算,题面不上传,最近输入的题面会存在本机方便下次接着改。想直接玩:数独四档难度都保证唯一解且不需要猜,技巧入门见三招基本功。换个方向动脑子的还有魔方 3D 教程和翻卡配对,后者背后的记忆科学见间隔重复如何让记忆效率翻倍。