数独可以猜吗?
计算机说的「猜」是什么、为什么人猜的是另一回事、什么样的分类讨论算正当推理,以及「这道题需要试错」到底意味着什么。
数独的规则里没有任何一条禁止猜。规则只说每个数字在每行、每列、每宫各出现一次,仅此而已。猜不违规,它只是一个看起来比实际好用得多的工具,而这一点值得说清楚。
混乱来自一个事实:计算机解数独几乎完全靠猜,而且极其擅长。但计算机在做的事,和一个人「猜一个填进去」,根本不是同一种活动。
计算机实际上是怎么解的
标准算法是回溯搜索。找到候选数最少的空格,试其中一个,把后果传播下去,继续往前。碰到矛盾就撤销这次选择,换下一个候选。所有候选都失败,就把再上一层的选择也撤销。
关键性质有两条:机器在每次选择之前都完整记得当时的局面,以及它是穷尽的。一次错误的猜测不会损失任何东西,因为它总能精确回到原处;只要解存在,试遍所有分支必然会找到。
数解的个数用的是同一套东西,只改一点:找到第一张完整盘面不停,继续往下找。验证唯一性根本不需要总数,只需要知道是「一个」还是「不止一个」,所以计数上限设为二,一旦找到第二个解立刻收手。静心数独在生成过程中,每挖掉一次格子跑的就是这个。
人去猜,做的是另一件事
人猜的时候,上面那两条性质一条都不成立。你手里没有猜之前那张盘面的可靠快照,你只有一张纸,上面多写了一个数字;等矛盾终于露头,这个数字上面已经又压了二十个数字,要精确退回去既难又容易出错。
更麻烦的是矛盾通常来得很慢。一个错的数字可以在很长一段时间里和一切都自洽,它的后果安静地扩散到整张盘面。等到终于崩了,你根本分不清是当初那一猜错了,还是之后某一步普通失误。
所以一个人在猜的时候,他不是在做搜索,他是在赌盘面比矛盾先结束。这一赌,正是把一道差不多要做完的数独毁掉的头号原因。
正当的版本:把分类讨论走完
有一种假设性推理是完全站得住的,而且高手一直在用。区别在于:你不承诺任何一个分支,你把所有分支都算一遍。
找一个只剩两个候选数的格子。先假设它是第一个,顺着后果推,直到撞上矛盾,或者推出点什么。然后——一个字都不往盘上写——对第二个候选做同样的事。有用的结果有两种:
- 某个分支推出了矛盾。那么这个候选数不可能成立,另一个就被证明了——这是反证法,不是猜。
- 两个分支在别的地方逼出了同一个结论。那么这个结论无论如何都成立,你不需要知道到底走的是哪一支,就可以把它写下来。
第二种模式正是 XY-Wing:枢纽要么是 X 要么是 Y,无论哪一边,总有一个钳形格必须是 Z,于是两个钳形格共同看见的格子都可以删掉 Z。所有 Wing 和链类技巧,本质都是打包好的分类讨论——一个被两条分支都走完、而不是只走了一条的假设。
实践规则很简单:围绕一个假设做推理没问题,把它写进盘面然后祈祷则不行。如果你没法同时拿住两条分支,那就把自己限制在恰好剩两个候选数的格子上,并且让分支尽量短。
真有必须猜的题吗?
这完全取决于求解器的技巧清单停在哪里。每一道合格的数独都有唯一解,原则上每一步都能由某条推理链证明;但这些链可以长到——一个人跟着它走,其实就是在做搜索,只是多绕了几道手续,而任何一份有名字的技巧清单都不可能覆盖所有情况。
所以「需要猜」的真实含义是「需要我们没实现的那部分东西」。对一道按技巧定级的好题来说,这条边界是被有意画出来的。在这个 App 里,困难及以下的每一档都验证过能在本档技巧范围内解完,所以从不需要猜;专家是唯一允许需要试错的一档,而即便在专家档,生成器也优先给纯逻辑能解的题,实在找不到才退让。无论哪种情况,解都仍然是唯一的。
想猜的时候,通常是别的地方出了问题
在一道定级严谨的题上想猜,这是一个信号,而不是一个策略。它通常意味着三件事之一:你在上一次落子之后没有回头重跑便宜的技巧;本档里有某一个技巧你还不会;或者盘面上已经有填错的数,所以根本不存在可用的推理。
把每一行、每一列、每一个宫查一遍重复数字,花一分钟就能排除第三种。前两种靠一条从最便宜开始、每次落子后重启的升级顺序来解决。
常见问题
计算机解数独靠逻辑还是靠猜?
主要靠猜,形式是回溯搜索——试一个候选,传播后果,遇矛盾就撤销。它之所以行得通,是因为机器能精确回到之前的局面,并且能穷尽每一条分支。有些求解器会先跑人类技巧来加速,但真正保证有答案的是搜索。
需要猜的题是不是做得不好?
不一定,但在最高档以下确实体验很差。它通常只是说明这道题需要一个定级器没实现的技巧,而不是说明不存在推理。真正没有唯一解的盘面是另一个、也严重得多的问题。
猜和分类讨论有什么区别?
猜是选定一个分支往下走;分类讨论是把每个分支都算一遍,只写下所有分支都成立的结论,或者干掉那个推出矛盾的分支。前者能毁掉一张盘,后者只是普通逻辑。
猜错了能撤回来吗?
在手机上可以,撤销会把盘面和候选数一起还原,包括从相邻格清掉的那些候选数。在纸上你只能靠记忆重建,这正是纸上乱猜往往致命的原因。
拿真题试一遍
静心数独按「解题真正需要的最难技巧」给每道题定难度,题目在交到你手上之前就验证过唯一解,提示会说出用的是哪一种技巧,而不是只把数字填进去。免费、离线、无广告、无账号。