分支匹配的基本推理
Reasoning of Wings
最后更新于
Reasoning of Wings
最后更新于
如图所示。我们把注意力集中到 r8c5
之上。这个单元格只有两个候选数:7 和 9。我们不妨根据所填的数字进行讨论:
如果 r8c5 = 7
,则同列的 r1c5 = 1
;
如果 r8c5 = 9
,则同宫的 r9c4 = 1
。
由于 r8c5
必须填的是这两个的其中一个,所以 r1c5
和 r9c4
里肯定会有至少一个位置填的是 1。
这能说明什么呢?我们来看看。r1c4
和 r9c5
这两处单元格比较特殊。这两个单元格刚好既和 r1c5
同一个区域,也和 r9c4
同一个区域。我们倒过来看,如果说我们让 r1c4
或 r9c5
的任意一个格子填上 1,就会同时让刚才我们提到的 r1c5
和 r9c4
都无法填上 1。
但是,这显然是不行的。我们刚才才得到这两个单元格必须有一个 1。所以,这便出现了矛盾。所以,根据前面的两种情况的假设,我们就直接可以得到结论 {r1c4, r9c5} <> 1
。
我们把这个推理过程称为 XY-Wing。
我们再来看一个例子。
这个例子和前面几乎一样,所以希望你自己推理它。
如图所示。这个技巧其实就比刚才的 XY-Wing 多了一个候选数。
和前面的方式一样,我们这次讨论的是 r3c2
的填数情况。
如果 r3c2 = 4
,则同列的 r7c2 = 1
;
如果 r3c2 = 9
,则同行(或者说同宫)的 r3c1 = 1
;
r3c2 = 1
。
这意味着,r3c2
、r3c1
和 r7c2
里肯定会有至少一个单元格填的是 1。
那么这一次又有什么单元格可以得到删数结论呢?r1c2
了。如果它填上 1,就会同时让刚才所说的三个单元格全部不能填 1,直接产生矛盾。
所以,r1c2 <> 1
是这个题的结论。
我们把这个结构(XY-Wing 上多了一个候选数)称为 XYZ-Wing。
我们再来看一个题。
这个例子也希望你自己理解。
前面我们看过了 XYZ-Wing,是 XY-Wing 上增加了一个候选数得到的新结构。这次,我们再往上加一个格子。看看四个单元格能不能也能这样用。
如图所示。这次我们假设的是 r2c2
这个单元格。
如果 r2c2 = 2
,则旁边的 r2c3 = 3
;
如果 r2c2 = 5
,则同宫的 r3c1 = 3
;
如果 r2c2 = 9
,则同列的 r7c2 = 3
;
r2c2 = 3
。
那么可以发现,这次是整整四个单元格里至少有一个填 3。
和前面一样,我们仍然能找到一个删数单元格。如果 r1c2 = 3
,则会同时使得四个单元格都不能填 3,满足不了至少一个填 3 的结论,于是就矛盾了。
所以,这个题目的结论是 r1c2 <> 3
。
我们把这个技巧称为 WXYZ-Wing。
我们再来看一个例子。
如图所示。这个例子希望你能自己推理一下。
看得出来,老外已经词穷了。它尝试在往字母表里一个一个字母往上加就成为了一个新的技巧名。用到 Z 之后发现已经没有字母了,又开始往前面找。
既然 WXYZ-Wing 已经过了,下面就再加一个单元格,就成了新的技巧了:VWXYZ-Wing。
如图所示。虽然推理完全和前面的一样,但是我还是解释一下。这次我们要假设的是 r6c4
的填数情况:
如果 r6c4 = 4
,则同行的 r6c7 = 1
;
如果 r6c4 = 7
,则同行的 r6c3 = 1
;
如果 r6c4 = 8
,则同宫(或者说同列)的 r5c4 = 1
;
如果 r6c4 = 9
,则同宫的 r4c6 = 1
;
r6c4 = 1
。
我们发现,这个例子里,仍然有删数结论。假设 r6c6 = 1
的话,则会同时使得前面假设的 5 个单元格全部没办法填 1。所以,结论就是 r6c6 <> 1
了。
我们再来看一则例子。
也是一样,这个例子就给你自己推理了。
可以通过技巧看出,它其实就是逐渐在扩展结构的规格,也就是使用的单元格数量。当然,除了 XY-Wing 变为 XYZ-Wing 的时候只是加了一个候选数而已。这个是名称的历史由来的问题。这我们一会儿说。
这个技巧的极限情况是多少呢?理论来说,这个技巧应该最大可以到 9 个单元格。但是因为越大的规格的这个结构,形成条件也就会越苛刻(毕竟有一个单元格需要有和单元格数量一样多的候选数数量),所以这只是个理论数值。
现在能够从题目里找到的最大规格是 5,即上面的 VWXYZ-Wing 就已经是最大的情况了。
另外,名称的话也是随着单元格数量变化的。和 WXYZ-Wing 以及 VWXYZ-Wing 一样,再大点,字母就会再多一些。所以不难想到后面的名字都是什么:
6 个单元格:UVWXYZ-Wing
7 个单元格:TUVWXYZ-Wing
8 个单元格:STUVWXYZ-Wing
9 个单元格:RSTUVWXYZ-Wing
不得不说,这个技巧的取名真的省事。
现在我们来说说为什么这个规格的命名并不是严格遵守的。
可以发现,XY-Wing 到 XYZ-Wing 并没有按多一个单元格方式在推广。相反,XY-Wing 只有两个字母,却上手就用了三个单元格。这个神奇的情况也占用了一个技巧名。
这个的原因是来自于这个技巧的来源。看前面的 XY-Wing 似乎我们看不太出来它的来源。但是如果你把宫内的两个单元格强行移动到行列上去,让这个结构的两个分支“垂直”,你就会发现,它长得很像是二阶鱼的“异数”版本。
二阶鱼是假设出两种填数情况,在排列的时候形成交叉填入的 X 字母形状。而 XY-Wing 在假设的时候,也是随其中一个位置开始假设两种填数,并最终影响到两端的填数。二阶鱼的删数是两个完整的行列;而 XY-Wing 的删数,则也取决于两端填数的影响的范围。
所以,XY-Wing 这个技巧的名字其实是来自二阶鱼的。回忆一下,二阶鱼的英文是什么?X-Wing。所以,不难想到,XY-Wing 就是因为用到了两个数字的假设,因此把 X 改成了 XY。
在之前的历史里,我们说到,X-Wing 的 X 并不是未知数,而是一架飞机的代号。但是,推广到 XY-Wing 时,X 被当成了未知数。换言之,二阶鱼确实用到的是一个数字内部的填数关系,所以 X 也可以理所应当地理解为一个数字。而 XY-Wing 则为两个数字的假设关系,因此 XY-Wing 就这么得来的。
而 XYZ-Wing 以及后面的名称,则是发现 XY-Wing 并不是“完整”的。所谓完整的,可以看到,从 XYZ-Wing 技巧开始,后面所有的结构,假设的单元格本身都带有和单元格总数量一样多的候选数数量。但是 XY-Wing 不是。XY-Wing 刚好少一个。少一个什么呢?少一个 XYZ-Wing 里的那个“Z”,也就是那个删的数字。
所以,再补全后,刚好因为 XYZ-Wing 用到三个字母就补齐了命名上字母的使用情况,因此,后面的技巧名也就随单元格数量直接加字母就行了。几个格子就用几个字母,然后从 Z 字母开始,从后往前数相同数量的字母,然后拼上 -Wing 就是这个技巧的名字了。