毛刺的基本推理
Reasoning of Burr
最后更新于
如图所示。假设我们忽略 r3c9(7)
这个候选数,当它不存在的话,那么 r3c789
三个单元格将只有 2、5、6 三种候选数,构成显性三数组(严格来说是死锁三数组),于是,b3
和 r3
上其余位置的 2、5、6 均可删除,就像是图上这样的删数。
但是很明显我们不能这么做,因为 r3c9(7)
的客观存在导致我们无法将删数当成真的结果。这可怎么办呢?没事,我们就按鱼鳍的类似逻辑去思考这个数。
倘若它不存在(为假),则有数组删数;但如果它为真的话,那么我们不妨就用一下强制链的思维去看别的地方有没有结论。
然后,就真的被我们逮着了:如果 r3c9(7)
为真,则 r6c9(7)
为假,于是对于 r34c8
和 r6c9
三个单元格而言,XY-Wing 结构就成立了,删数是 r23c9(6)
。
那么,结合两个配图我们可以看到,数组成立时候的删数和 XY-Wing 成立时候的删数均包含 r2c9(6)
,因此,这个题的结论就是 r2c9 <> 6
了。
可以从这个例子里看到,我们稍微借助了一下鱼鳍的概念,将 r3c9(7)
这个候选数视为鱼鳍分情况讨论了一下,然后发现两种情况均可删除同样的位置,于是删数便成立。我们把这种鱼鳍的类似用法,放在强制链里推导的思维称为毛刺(Kraken Burr,简称 Burr)。
对于这个用法而言,r3c9(7)
是作为数组的毛刺存在。不过我们也可以把这个链倒过来看:从 XY-Wing 出发,发现 r6c9(7)
是结构的毛刺。它为真的时候会引发 r3c9(7)
为假,于是数组成立。从这个视角里可以看出,毛刺的使用是不怎么区分先后关系的,它更像是链里正反都可以推理的效果,所以毛刺结构具体跟什么技巧所绑定命名,其实都可以。比如这个题你叫它毛刺数组是可以的;你叫它毛刺 XY-Wing 也是可以的。
不知道你还记不记得,早在链里我们就用过了毛刺的说法——毛刺数组链。在那个时候,它因为刚好是数组里多了那么一坨的东西,本身因为不影响链的直推逻辑,所以毛刺在那个时候还只是一个名称而已;对于现在,毛刺可能就不那么直观了,它不一定能作为一个单独的链在使用,它必须讨论真假性进行删数的寻找。
我们再来看一个例子。
如图所示,这是一个毛刺拓展矩形,有三个毛刺:r23c1(9)
和 r3c4(9)
。我们直接讨论他们的真假性。如果三个毛刺全为假,则会有图上的这样的画法。链表示如下:
这里用到了一个区块弱链关系 (4-1)r23c4
,原因是同真之后,数字 2 无法成功填入 b2
导致矛盾。所以这是一个很正常的不连续环,记住这是当毛刺为假时构成的不连续环。
那么,三个毛刺如果至少有一个为真呢?我们也有链可以用,不过我们稍微需要把毛刺拆一下,分个组。很显然 r3c4(9)
和删数 r3c6(9)
同在一个宫里,所以它为真的情况可以直接视为鱼鳍直接删数,就不用参与链的讨论;当然,r3c1(9)
因为和删数同行,所以也可以不考虑。但是,左边的 r2c1(9)
就不行了,这个确实跟删数没有直接关系。
那么我们不妨就这么分组。如果 r3c14(9)
这两个毛刺为假,而 r2c1(9)
为真时,我们有这个强制链:
如图所示。我们有这么一个强制链。假设 r2c1(9)
为真时,可以得到 r46c1(9)
为假的逻辑。所以这两个单元格会构成关于 4 和 5 的显性数对。为了确保 r46c16(45)
不会出现唯一矩形的矛盾,由于 r46c6(5)
是共轭对,所以必须让 r3c6(4)
此时为真,以规避数字 4 也为共轭对直接出现矛盾。所以可以得到 r3c6(4)
为真的结果。
也就是说,如果 r2c1(9)
毛刺为真,我们可以得到 r3c6(4)
为真的结论,这恰好也可以删除 r3c6(9)
。
然后就还剩下一种情况了,即 r3c14(9)
这两个毛刺至少有一个为真。这两个的话,因为刚好和 r3c6(9)
删数同在一个行里,所以它俩但凡有一个为真都可以直接删。
所以,我们经过三轮的讨论,最终可以得到 r3c6 <> 9
的结论。