Sudoku Explained

高级 约 9 分钟

X-Wing:一个数字只有四个落脚点

四格成矩形,一个数字,换来一个足够硬的保证:整两条线都可以划掉它的候选。

一句话版本

X-Wing 是这样出现的:某个数字在两条平行线上都恰好只有两个落脚点,而这两条线指向的是同样两条垂直线。四个格子,一个矩形,一个数字。

它给你的保证很窄,但是绝对的:在穿过矩形的这两条垂直线里,这个数字不可能出现在四个角之外的任何地方。删掉,继续走。

形状

挑一个数字。挑两行。在这两行里,这个数字都必须恰好只有两个落脚点,而且两行用的是同样那两列。它们交汇的四个格子围成一个矩形——四个角。

反过来一样:两条列,每条都恰好只有两个落脚点,且都落在同样两行上。

两种写法是同一个图形从不同方向看,而排除发生在你「进来」的那个方向。这部分最多人做错,所以值得给它们命名:

为什么成立

证明是一个两情况讨论,短到可以装在脑子里。

假设这个数字被限制在第 3 列和第 7 列,落脚点只在第 1 行和第 3 行。现在问:第 3 列的这个数字在哪一行?要么第 1 行,要么第 3 行,没有第三个位置。

无论哪种情况,第 1 行和第 3 行最后都恰好各含这个数字一次,而且都落在第 3 列或第 7 列。因此在第 1、3 行里,它不可能在别处。从这两行的其余部分删掉它。

你永远不会知道是哪个角装着它。这没关系——这个排除不依赖你知不知道。

一张真实盘面

这是活盘面上的同一个图形。候选数已经过滤到只剩 4——填好的数字照原样保留,其余都是噪音。

数字 4 在第 4 列和第 8 列都只有两个位置,而且正好是第 8 行和第 9 行(R8C4、R8C8、R9C4、R9C8)。这四格组成矩形,第 8 行和第 9 行各自都会有一个 4,所以这两行在矩形外(R8C2、R8C3、R9C3)不可能是 4。

走一遍:

现在用结论。第 8 行必须有一个 4,而它只能在第 4 列或第 8 列——所以记在 R8C3 和 R8C2 的 4 都不可能。第 9 行还多送一个:它的 4 只能在 R9C4、R9C8 或 R9C3,所以 R9C3 也划掉。

三条排除,两行都关上了:它们的 4 只能落在矩形里。注意,一条线看起来填得多满完全不说明问题——第 8 列快填完了,第 4 列空得很,两者对这个数字都恰好只有两个落脚点。唯一重要的是数出来的个数。

怎么扫出来

X-Wing 是逐个数字找的,而且先扫稀疏的线会容易得多。

  1. 一次只看一个数字。 不要在盘面上找形状,要找某个具体的数。
  2. 数每条线的落脚点。 对你选中的数字,沿每一列走一遍,数有几格放得下。你要的是恰好两格。一格的是隐单,三个以上在这里没用。
  3. 把「两格」的线放在一起比。 如果两条列都只有两个落脚点,而且落在同样两行上,你就有 X-Wing 了。行不同就继续往下扫。
  4. 换方向再来一遍。 镜像版本——两条行各两个落脚点、指向同样两列——是同一次搜索把行列互换。多数人习惯扫行,所以基于列的 X-Wing 更容易被漏掉。
  5. 清覆盖线。 把这个数字从两条交叉线的其余部分删掉,只留四个角。

一个实用的捷径:数字快填完时,它的落脚点就少,而快填完的数字正是 X-Wing 的住处。从盘面上出现次数最多的那个数字开始。

它证明不了什么

X-Wing 不告诉你哪个角装着这个数字。它也不对两条基线说任何话——在第 3 列和第 7 列内部,候选位置原封不动。所有排除都发生在垂直方向。

这个不对称是最常见的错误。看到矩形之后,人往往会去删两条列,而那是图形不支持的方向,最后一定把盘面弄崩。

还有一个更隐蔽的坑:图形要求每条线上恰好两个落脚点。如果某条列有三格能放这个数字,矩形就不存在,即使其中两格正好是角。三个落脚点意味着它可能逃到第三个位置,两情况讨论立刻塌掉。

X-Wing 和剑鱼

剑鱼是同一个推理用三条线而不是两条:三条列,这个数字在每条上只有两到三个落脚点,且全部落在三行之内。它最多涉及九格,排除发生在三条行上。

如果 X-Wing 已经不费劲,剑鱼就不是新技巧——它是同一道数数题,网撒得更大。扫描顺序一样,「排除方向垂直于基」的规则也一样。

这个家族还能往上走(水母是四条线),但到那个层级,图形已经稀有到别的技巧通常先把题做完了。

什么时候值得用

X-Wing 出现在那种别处都卡死的题里:没有裸单,没有数对,每个格子都是三四个候选。这时候三十秒的数数才划算。

它也是第一个让数独像下棋而不像算术的技巧——这一步的价值不是一个数字,而是对「以后数字能去哪」的一条限制。

常见疑问

什么是 X-Wing?

某个数字在两条平行线上都只有两个落脚点,且这两条线的落脚点落在同样两条垂直线上,四格围成一个矩形。这个数字可以从这两条垂直线上、矩形之外的其他格子排除。

该从行排除还是从列排除?

看「基」是哪一对线。如果这个数字在两条列上各只有两个落脚点,就从穿过它们的两行排除;如果在两条行上各只有两个落脚点,就从两列排除。

X-Wing 会直接填出一个数字吗?

永远不会。它删候选,删完常常造出一个裸单或另一个图形。把它看成一个「解锁下一步」的动作。

X-Wing 和剑鱼(Swordfish)什么关系?

剑鱼是同一个思路用三条线而不是两条,最多涉及九格。你对 X-Wing 说的每句话都能推广到剑鱼,扫描方法也完全一样。