Sudoku Explained

高级 约 7 分钟

三格吃下三个数字

三张候选表不必长得一样,只需合起来正好是三个数字,不多一个。

一句话版本

显性三数组,是同一单元里三格,它们的候选表合在一起,恰好包含三个不同的数字。

这三个数字必须填满这三格。没有多余的留给单元里其他格子,所以这三个数字可以从单元里其他每一格删掉。

形状

条件看的是并集,不是每张表各自的样子。这里几乎所有人都会走错。

下面三种都是合法的显性三数组:

甲格乙格丙格并集
「4、5」「5、7」「4、5、7」4、5、7
「4、5、7」「4、5、7」「4、5、7」4、5、7
「4、7」「4、7」「5、7」4、5、7

三种看起来差别很大,但都在三格里消耗掉 4、5、7 这三个数字。

不成立的是:「4、5」「5、7」「4、7、9」。并集是四个数字摊在三格上。有退路,什么都没被用掉,什么都别删。

为什么成立

三格、三个数字,每格填一个值。

假设并集是「4、5、7」。不管这三格最后填成什么,取值集合必然是「4、5、7」的子集——因为没有一格能填自己候选表以外的东西。三格需要三个值,所以这个子集恰好三个元素,所以三格装的就是 4、5、7,只是次序未知。

一个单元里每个数字最多出现一次。三份都在三数组里面了。单元里其他每一格,都被这三个数字排除。

和数对一样,你永远不知道具体哪格是哪个数——而排除不依赖于此。

真实盘面

R5C1、R5C2、R5C7 三格的候选合起来恰好是 4、5、7,不多不少。这三格分掉这三个数,第 5 行的其它格就不能再出现它们。

第 5 行里三格,候选合起来恰好是 4、5、7:

并集:「4、5、7」——三个不同的数字,摊在三格里,一点没剩。

所以第 5 行把 4、5、7 放在这三格内,次序未知。现在看 R5C3,它写着「4、5、6」。它的 4 和它的 5 都得走:R5C3 掉到只剩 6,一个单候选。

注意三张表不必长得一样。R5C7 只有两个候选,照样属于这个三数组——因为被用掉的是并集。

怎么扫

三数组是按单元找的,搜索更像一道小组合题,而不是视觉识别。

  1. 先收集短表。 在一个单元里,凡四个以上候选的格子全部忽略。三数组要求三格并集是三个数字,所以每一格最多三个候选。
  2. 先找「两加一」。 最常见的三数组是两格共享「x、y」,第三格给出「x、z」或「y、z」这样的重叠。从这里入手。
  3. 验并集。 取三张候选表,数不同数字的个数。恰好三个,就是三数组;四个以上,什么也不是。
  4. 三种单元都查。 宫里的三数组在宫里删;如果这三格同时共用一行,行里也能删。
  5. 回头读受影响的格子。 和所有排除技巧一样,收益通常是某格掉到单候选。

一个值得备着的捷径:三数组常常藏在三个宫排成一排的地方。如果一行的三个宫各有一格在同一列上很拥挤,验并集的成本很低,而且常常成立。

显性三数组 vs 隐性三数组

还是方向。

显性三数组讲的是「格子跑不掉」,隐性三数组讲的是「数字跑不掉」。两者消耗的是同一个三乘三结构,而且在同一个单元里,很常见的是一组数字具备前者、另一组数字具备后者。

隐性三数组,往里那个版本。

陷阱

长度误解。 要求每格都恰好三个候选。真正重要的是并集,一张「4、5」的表和三张「4、5、7」一样有资格待在三数组里。

并集成四。「4、5」「4、7」「5、7、9」——三格、四个不同数字。这是最常见的假象之一,因为它看起来像一个漂亮的三角重叠。它不是三数组,从它删候选会把盘面弄坏。

两格加一个路人。 两格构成数对,旁边还有第三格恰好共享部分候选。那是数对加噪音。数对仍然成立——但只作为数对,只做数对该做的排除。

用在哪

显性三数组在难题里频繁出现,而且一旦候选数写出来,它几乎是免费的:搜索是一次带过滤的比较,而不是看盘面。

它也能推广:四格吃四个数字是显性四数组,推理一点都不用改。四数组罕见得多数人懒得给它命名,但检验方法一样——并集大小等于格子数。

常见疑问

什么是显性三数组?

同一单元里三格的候选合起来恰好是三个数字。这三个数字必须占满这三格,所以单元里其他格子不能再出现它们中的任何一个。

三格都必须有三个候选吗?

不必,这是最常见的误解。像「4、5」「5、7」「4、5、7」这样的三张表就是合法的三数组。看的是并集,不是每张表的长度。

显性三数组和隐性三数组有什么区别?

显性三数组把这三个数字从单元里其他格子删掉;隐性三数组把这三格里的其他候选删掉。形状相同,排除方向相反。

两格能构成显性三数组吗?

不能。两格的候选合起来有三个数字,意味着必有一格要装两个值,不可能。三数组需要三格。