Sudoku Explained

进阶 约 7 分钟

两格已经私下商量好了

同一单元里两格都只有同样的两个候选,这两个数就被用掉了——单元里其余格子只好另找。

一句话版本

显性数对,是同一单元里两格,候选表完全相同,且都恰好只有那两个数。注意不是「都包含」,而是「恰好只有」。

既然这两格必须分摊这两个数,它们就被用掉了。单元里其他每一格,都要把这两个数划掉。

形状

找一个单元——一行、一列或一宫。在里面找两格。两格都必须写着「x、y」,不能再多。

如果一格是「4、7」,另一格是「4、7、9」,那就不是数对。第二格还有退路,没有什么逼它只能取 4 或 7,也就没有什么被用掉。

条件就这一条,值得说明白,因为绝大多数假象都是不小心把它放松了:两张表、恰好两个数、而且恰好是同样那两个数。

为什么成立

两格、两个数,每格只能填一个值。

假设数对是「4、7」。第一格不是 4 就是 7。不管是哪个,另一个数字都必须落到第二格里——因为第二格没别的地方可去。于是这两格合起来,正好消耗掉一个 4 和一个 7。

一行(或一列、一宫)里每个数字只能出现一次。两份都已经记在这两格名下了。所以 4 和 7 不可能出现在这个单元的其他任何位置。

注意这个论证不需要知道哪格填哪个。排除在「谁是谁」这个问题被回答之前、以及不管它怎么被回答,都成立。

真实盘面

R1C7 和 R1C9 的候选都只有 5、6 这两个数,它们必定一个填 5、一个填 6。所以第 1 行的其它格子(R1C3)不能再出现 5。

第 1 行里两格,候选都只有两个:

表完全一样,同一行,两格。所以它们一个是 5、一个是 6,第 1 行的 5 和 6 都用完了。

后果落在第 1 行的其余部分:R1C3 的 5 被删掉。它本来是个候选,现在不是了。第 1 行的 5 由这两格供给。

注意这一步有多便宜。比两张候选表,删一个候选,这一行的确定性就往前进了一格。

怎么扫

显性数对是按格子找的,不是按数字找,所以扫描方式和隐性唯一数完全不同。

  1. 一个单元一个单元走。 挑一行,读它所有空格的候选表。你要找的是两张一模一样的短表。
  2. 先看短的。 数对必须恰好两个候选,所以凡是有三个以上候选的格子,全部跳过。这一步能砍掉盘面上大部分工作。
  3. 只在同一单元内比较。 两个都是「5、6」的格子,如果在不同行、又不共处任何单元,什么也构不成。论证的范围就是一个单元。
  4. 三种单元都查。 在宫里找到的数对,排除在宫里做。如果这两格同时还在同一行上,行里也能删——但这只是因为它们确实共用那一行,不能靠假设。
  5. 找后续。 删完之后回头再读受影响的格子。掉到只剩一个候选的格子就是裸单,数对的收益通常落在这一步。

一个有用的捷径:数对喜欢挤在拥挤的单元里。如果某一行有很多三候选、四候选的格子,而且一个都没解开,那一行最可能藏着数对。

三个假象

近似数对。「4、7」和「4、7、9」乍看是数对,不是。多出来的那个候选就是全部差别。

假三连。 三格都写着「4、7」——既不是数对,也不是三数组。这是三格都可以是 4 或 7,对两个数来说格子多了一个,谁也没被用掉。什么都别删。

跨单元数对。 同一行、不同宫的两个「4、7」,只能在这一行里删,不能顺带删宫。解题的人常因为「这两格看着有关系」就一起删了。它们的关系只存在于真正共用的那个单元里。

显性数对 vs 隐性数对

这两个被混得最多,而混淆的关键在方向。

显性数对里,格子是证据,单元付账;隐性数对里,数字是证据,格子付账。如果你因为一个显性数对去删某格的候选,那就是方向反了。

隐性数对,在真实盘面上走一遍。

用在哪

显性数对是第一个必须依赖完整候选表的技巧,所以它天然属于「盘面走不动了」的那一刻。它在中等和困难题目里出现得极频繁,而候选表写出来之后,检查它的成本很低。

它也能直接推广:三格分摊三个数是显性三数组,推理完全一样,只是更宽。如果数对对你来说已经很明显,三数组就是下一步,而不是新东西。

常见疑问

什么是显性数对?

同一行、同一列或同一宫里,两格的候选表完全相同,且都恰好只有两个数。这两格必定一格一个,所以单元里其他格子不能再出现这两个数中的任何一个。

显性数对和隐性数对有什么区别?

排除的方向相反。显性数对是把这两个数从单元里其他格子删掉;隐性数对是把这两格里的其他候选删掉。

三格各有两个候选,能算显性数对吗?

不能。三格共用两个数,这两个数就不再被这两格(而是三格)分摊,约束散了。数对要求恰好两格。

显性数对能直接填出数字吗?

很少。它删候选,而删完常常让某格只剩一个候选,于是变成裸单。把它看成「造出下一步」的动作。