Sudoku Explained

进阶 约 7 分钟

两个数字,只有两个落脚点

当 4 和 6 只能住在同样的两个格子里,这两格就是它们的——你写进去的其他候选全是噪音。

一句话版本

隐性数对是这么一种情况:两个数字,除了同一个单元里的同样两个格子,别处都去不了。两个数字都得落子,而能用的格子只有两个,那么这两格就是它们的。格子里写着的其他候选全是错的,擦掉。

它很少直接给你一个数字。它给你的是一个格子从四个候选突然变成两个候选——通常这就够打破僵局了。

把定义说准

取一行、一列,或者一个宫。看某一个数字,数它在这个单元里能放进几个格子。如果恰好两格,它就被限制在这两格里。

再对另一个数字做同样的统计。如果它也被限制在同样的这两格,你就找到了一个隐性数对。

两个条件,缺一不可:

  1. 每个数字在单元里都恰好只有两个落脚点——只剩一个那是隐单,三个以上就不算「被限制」。
  2. 两个数字共用这两格。两个数字各自被限制在两格、但格子不同,那不叫数对,什么也推不出来。

为什么这个排除是成立的

这是抽屉原理,值得说白一点,因为它解释了这一步为什么安全。

两个数字都必须出现在这个单元里——这是数独的规则。它们各自都只有两个可用格子,而这两个格子是同一对。两个数字、两个位置、没有别的选择:这两个位置必须由这两个数字占据,只是顺序未知。

一旦接受这个结论,格子里写着的任何别的候选都不可能。这两格已经被预定了。你还不知道哪个数字进哪一格,但你确定别的东西进不去。

一列真实的盘面

下面是一局真实对局的第 4 列。三个空格,其中只有两格决定这一步。

在第 4 列里,数字 4 和 6 各自都只能落在 R1C4、R9C4 这两格。这两格必定一格 4、一格 6,所以其它候选(R1C4 的 2;R9C4 的 2)可以删掉。

这一列已经有 5、8、7、9、3、1,所以缺的是 2、4、6。

逐个看它们能放哪:

两个数字,两个格子。R1C4 和 R9C4 必须以某种顺序装下 4 和 6,这意味着这两格里写着的 2 不是「可能性很小」,而是「不可能」。删掉。

2 一走,这一列就读干净了:R5C4 是 2——它本来就只有这一个候选——另外两格是 4 和 6,顺序未知。三个未定的格子变成了一个说得清的单元,而你没有填任何一个数字。

怎么找

这个扫描是数字优先,不是格子优先。

  1. 挑一个一眼能读完的单元。 填了四五格的行很好用;几乎空着的行候选太多,数不准。
  2. 对每个缺失的数字,数它的落脚点。 你要找的是恰好两格。三个以上的直接跳过,它没被限制。
  3. 把「两格」的数字放在一起比。 如果其中两个指向同一对格子,那就是隐性数对。
  4. 擦掉这两格里其他所有候选。 不是擦单元里——是擦这两格。

实际做的时候,你盯的其实是隐单那个形状,只是往外多看了一步:一个落脚点的是隐单,三个数字共三个落脚点的是隐性三数对,逻辑一样。

方向搞反的代价

这是最多人做反的地方,而且代价不小,因为它看上去非常合理。

明显数对隐性数对
被固定的是什么两个格子的候选列表完全相同两个数字被限制在同样的两格
删什么这两个数字,从单元里其他格子删其他所有候选,从这两格里删
方向向外向内
两条候选列表一模一样通常不一样

明显数对看格子,向外排除;隐性数对看数字,向内排除。两种情况做反了,都会产生没有依据的排除,而你不会立刻发现——要等到二十步之后盘面自相矛盾。

一个实用的自查:明显数对的两条候选列表必须完全相同;隐性数对的两条通常不同,正因为不同才需要这个技巧。上面那个例子里,两格都写着 2、4、6,但数对是 4 和 6,被删掉的恰恰是那个 2。

它比看起来更重要

隐性数对出现在一道题的中段,正好是什么都不管用的那一段:每个格子都有三四个候选,没有裸单,盘面像锁死一样。

这时候隐性数对一次做两件事。它缩短两条候选列表,而且经常紧接着就冒出一个裸单——一个只剩两个候选的格子,如果其中一个候选已经被同单元的另一格占掉,它当场就变成裸单。

它还是更硬的技巧的前置条件。X-Wing、摩天楼、强制链,全都默认候选列表是可信的。漏掉一个隐性数对,意味着列表太长,而长列表会把图形藏起来。

什么时候不成立

那个数字其实还有第三个落脚点。 那它就没被限制,也就没有数对。这是最常被漏掉的失效情况,因为那两格看上去依然工整对称。

两个格子不在你正在处理的这个单元里共有。 行里成立,不代表列里成立,哪怕这两格碰巧和别的东西同列。成立依据只覆盖你发现它的那个单元。

两格同时也同宫。 这时你白捡一个额外结论:排除在那个宫里同样有效,因为宫里有的是同样这两格。这很常见,也很容易忘。

落子之后没更新候选。 在过期的笔记上找出来的隐性数对是幻觉。如果三步之前你填了一个数字却没清理受影响的格子,你的计数就是错的,这个数对可能根本不存在。

常见疑问

什么是隐性数对?

在同一行、同一列或同一宫里,两个数字都只能放进同样的两个格子。这两格因此必须装下这两个数字,格子里其余候选全部删掉。

隐性数对和明显数对差在哪?

明显数对是两格的候选列表完全相同、都是那两个数字,删的是单元里其他格子上的这两个数字。隐性数对是两个数字被限制在两格,删的是这两格里其他的候选。排除的方向正好相反。

隐性数对能直接填出一个数吗?

通常不能。它删候选,往往会顺手造出一个裸单,或者打开另一个技巧。把它当成铺垫而不是落子。

数对可以同时跨行和宫吗?

只有当这两格恰好同时在行和宫里才行。成立的依据永远只限定在你发现它的那个单元内。如果两格真的也同宫,你可以在宫里一并排除——这是附赠的。