打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[数独高级技巧] 鱼

我们在之前的内容之中学到了数组,那么这里将为您拓展一种新的技巧,这种技巧称为鱼。

当填到这里的时候,发现数对已经填不下去了。此时,我们可以观察到,在行A中,只有A2 & A6可以填入6;而在行H中,只有在H2 & H6可以填6。它们刚好构成一个矩形。可是这有什么用呢?
我们不妨假设一下(请在图上找到对应单元格,并进行推理):
 情况1:如果A2填6的话,那么A6 & H2将不能填6,那么就只有H6填6了;
 情况2:如果A6填6的话,那么A2 & H6将不能填6,那么就只有H2填6了。
只有这两种情况了。我们可以看到,情况1的假设是“A2=6”,结论是“H6=6”;而情况2的假设是“A6=6”,结论是“H2=6”。将这两种情况分别放到图上看,我们可以发现,无论是左上角(A2)和右下角(H6)填6,还是右上角(A6)和左下角(H6)填6,都会使得列2 & 列6出现一个6。所以列2 & 列6的其余位置,即非这个“矩形”的四个顶点外的其余单元格内,都将不再出现6的身影。因此,有C6, G6, I2, I6<>6。

把每一条假设的开头位置和结尾位置连接起来,会发现它组成了X的形状。所以这个解法的英文名由此得来——“X-Wing”。在英语中,wing是翅膀的意思,就像一个展开的翅膀一样。它有一个独特的名称——四角对角线法则。
有意思的是,这种方法还能够拓展到三阶的情况。这也就是为啥它还有一个名字,叫做二链列了。
在刚才的二链列中,我们将产生二链列的单元(图中的行A和行H)叫做定义域(Defining Set/Base Set),表示二链列被定义的位置,这里就可以描述为定义域行AH;而若要描述这个定义域的其中一部分,我们可以用子定义域(Defining Subset)这个术语,比如:子定义域行A;并将需要排除候选数的单元(图中的列2 & 列6)称为摒除域删除域(Secondary Set/Cover Set),表示用于排除该候选数的位置。而图中涉及假设的所有位置(绿色的候选数构成的)叫做鱼身(Body)。这到后面的鱼的变型中会非常常用。这样的结构我们称之为(Fishy Cycle)或链列。 

三链列(剑鱼)比起二链列的情况会多一些,因为它需要更多的假设和推理。例如下面的这个盘面:

此时我们观察到,在行C、行F和行H都有且仅有列标为5、6、7的单元格可以填,所以,4在这3行里被控制在那9个单元格内。这时候就假设一下:
情况1:如果C5=4,则F5, H5, C6, C7<>4,解不出,就继续假设:
A. 如果F6=4,则F7, H6<>4,则H7=4;
B. 如果F7=4,则F6, H7<>4,则H6=4;
情况2:如果C6=4,则C5, C7, F6, H6<>4,解不出,就继续假设:
A. 如果F5=4,则F7, H5<>4,则H7=4;
B. 如果F7=4,则F5, H7<>4,则H5=4;
情况3:如果C7=4,则C5, C6, F7, H7<>4,解不出,就继续假设:
A. 如果F5=4,则F6, H5<>4,则H6=4;
B. 如果F6=4,则F5, H6<>4,则H5=4。

我们发现,无论是哪种情况的假设,始终都会使得列5、列6 & 列7上至少都有一个4。也因此,列5、列6、列7的其他位置上,候选数4将可以被安全地删掉,亦即图上的A5、A6、B5、B7、D5、D7、G5内的候选数4均将被删除。这就是三链列或剑鱼。注意,此题的三链列的定义域为行C、行F和行H,删除域为列5、列6 & 列7。
但是,图中有一个奇怪的地方。图上有一个宫摒除法,是H5=8,由B6(8)、G1(8)和I8(8)在宫8内摒除得到的。填入了这个8之后,就会发现一大堆摒除法,还有两个唯一余数法,于是就一口气做到了这里:

原来的三链列残缺成了这样(缺了一个“角”),那么它是否还是可用的呢?答案肯定是可以的。这并不影响三链列的用法。假设会比刚才的要少,但是仍能推理,并且把所有假设集合在一起,同样可以使得列5、列6、列7都至少有一个4的出现。此处将不列举其假设。这种情况被称为鱼的残缺(Incompleted)。您可以想象为,这是一个“二维”的数组,填数情况已经列举到这么3行3列之中,相当于一个三链数涉及的3格内的填数情况,第1格是{123},第2格是{123},而第3格则是{12}。数组的要求就需要满足每一格不一致,所以只需要至少每格2个候选数,就可以构成数组了。
所以应注意的是,鱼类比于数组,也应满足:每个定义域和每个删除域内都需要保证至少2个单元格。不论是否是三链列还是接下来的四链列,乃至后面的变异鱼,全部都需要满足此规律。 

它的定义域是列2、3、7、8,而删除域则是行A、B、D、G。此处省略其假设情况,请自行推理(四链列的出现频率是极低的,很难碰到,所以此处并没有重点讲解,依然利用刚才的假设法可以得到对应的结论,只不过可能会分3次假设,就比较困难)。但是,四链列和三链列的推理方式大同小异。这个就是四链列或水母。此处结论应为:行A、行B、行D、行G中剩余单元格内将删除候选数9。
但是,四链列也同样具有部分单元格残缺的情况,而且相对于上一例,一般来说,残缺的则更为常见。例如下面的这个残缺四链列结构:

此处,四链列所涉及的单元格仅仅只有8格,但是仍然可以进行推理。不过,它只有两种情况了。
如果A1=8,则I1<>8,则I2=8,则F2<>8,则F5=8,则G5<>8,则G6=8,则A6<>8;反过来也就得到了I1、F2、G5、A6都为8了。但无论是那种情况,列1、列2、列5、列6内都不得在其余单元格内出现8。因此删掉它们。 

高阶链列(高阶鱼)是当阶数大于4后的情况。这样的技巧也同样存在,但是和n>4的数组一样,只存在于理论之上。这是因为高阶链列会被与其正交的鱼完全替换,原鱼和可用于替换的鱼的阶数和盘面尺寸有关,最高的是阶数与9互补的情况。
根据上述加粗文字可列出下表,从下表中就可了解到高阶链列的一些详细情况了:

从上表中,您也能够看出,为什么不存在八链列的说法。

下面将展示五链列的其中一个例子。黄色数字1为被删除情况,绿色1为五链列,它也属于残缺的情况。不过,它可以转化成一个关于候选数1的三链列。


另外,区块摒除法还有一个别名,是一链列(Cyclopsfish)。这是为什么呢?这会在后面讲到。
最后,需要注意一点。这一章讲到的技巧被称为鱼或者链列。链列前面加上前缀数字表示这个技巧是多少阶的,此处即表示多少行多少列。与此同时,也可以说它的“品种”是剑鱼和水母等等,而二链列则没有对应的品种名称,但仍然属于鱼这一大类。 

如下图所示,这是一个二链列,但是其中的两行被“绑”在了一起,但仍然可以看成是一个定义域为行B、行G的二链列。
其中的“*”符号表示删数情况,“/”符号表示不含有某个候选数,而“x”符号表示含有某个候选数。
此时我们发现,结构可以删除掉宫内的一部分位置,即如盘面所示。


我们发现,假设过程中,B4、B5、G4、G5这4格必然有1格会填这个候选数,所以说,无论是哪个位置,都会导致这个宫内的其余位置不能填此候选数,故这个宫内的这个位置仍然也要被删除掉。所以,图中紫色星号处也能够被删除。

这个思想有些类似于区块摒除法。无论哪格填,都会删掉共同对应的其他位置。
另外,由这条鱼本可以直接删掉删除域的位置的该候选数的,但由于多出了一个由B4、B5、G4、G5这4格构成的两个“特殊”区块,由此也可以得到删数效果的,我们称为层叠区块摒除法或级联区块摒除法,有时被简称为区块摒除法,而类似这种说法,由某种技巧可以“绑定”区块摒除法且也可以进行删数的,我们就直接称为层叠级联(Cascade)现象。
另外,一般的二链列都是4个顶点分属4个宫内的,当出现同侧顶点在同一个宫内的时候,这样的情况也是层叠现象,所以最简单的级联区块摒除法也就是这样的二链列了。即,结构如果存在于B4、B6、G4、G6这4格内,依然称为级联。 

鱼是一种很神奇的技巧,但是往往在出现的时候,并不是那么频繁,而往往会多出来一点点。这也就产生了两种变异类型。

在盘面中,我们发现有一个二链列,不过很怪异。
我们很容易地发现,这个二链列的定义域是列6 & 列7,很明显,删除域是行B和行D。可是不巧的是,这个关于数字7的二链列多出了一格,位于A6。于是尝试消除掉它。
如果说它本身不存在的话,那么列6 & 列7就只有B6、B7、D6 & D7这4格填入7了,很明显,这样肯定是构成二链列的,那么根据二链列的逻辑推理的话,删除域应为行B和行D;但是如果A6(7)是存在的,那么这个7就会导致行A、列6和宫2内的其余单元格内都不能填入7。
但是列6 & 列7也就这有这5格可以填,别无其它情况。那么我们就知道,这两种情况必然有1种成立,因此删除掉这2种情况都能够删除掉的位置,我们发现,这两种情况都能删的位置只有B4和B5,而B5已经有数字了,那么只能是B4。因此B4<>7。

这种“差一点”的鱼被称为外鳍鱼,其中的那个多出来的单元格被称之为外鳍(Exo Fin),而我们一般都简称为(Fin)。当然,有外鳍就有内鳍(Endo Fin),这将是后面介绍到的内容了。不过,可以先告诉大家的是,外鳍和内鳍的英文名称是来源于化学用语的“外型”和“内型”这一组同分异构体的。到时候利用这一点理解较为复杂的鱼的时候就将变得更加轻松。那么,为什么要叫鳍呢?因为鱼一词的英文名是Fish,也就是鱼的意思,那么多出来的就被理所当然地翻译成了鳍。而定义域仍旧是指原定义鱼位置的区域,但删除域则会发生变化:因为现在多了一个鳍,将只能删除掉数个单元格,而不是一整个单元(行、列)了。因此,例如本题,删除域将从原来而鱼的删除域——行B和行D改动为单元格B4 & 单元格B5。请注意这一点。

那么,鳍在哪里才能够算作外鳍鱼呢?鳍必须位于鱼的定义域内,且必须位于鱼某个顶点处的同一个宫内。这是为什么呢?因为,我们对标准二链列的推理方式就是选中定义域的其中1个,然后分情况讨论,最终能够得到相同的结论,因此得到删除域,删掉删除域内的单元格的数字。这里多了一个鳍,那么就假设鳍成立和鳍不成立,于是也就分成了两种情况。那么,鳍是否只能是1个呢?当然不是,如下面这个例子,就是2个鳍。

盘面就是2个鳍构成的二链列。要么二链列成立,要么旁边的2个鳍成立,虽然很明显,2个鳍不得同时成立,但是目前看来,至少都得有1种情况成立。无论是它们之间的哪一个,都会导致宫4内和行F内的其余单元格都不能填入9了。由于此时,行F已经没有可以删除9的位置了,因此只能去看宫4内的位置了。无论是二链列成立还是鳍成立,必然都会使得既在宫4、又在列1内的D1 & E1删除掉9。因此,D1, E1<>9。但要拥有这样的推理的话,多个鳍必须位于同一宫内,否则它就不是外鳍鱼了。当然,三链列也同样存在外鳍鱼。

如图所示。同理,分2种情况,要么是这个残缺的三链列成立,要么是鳍成立。因此删除掉都能删掉的部分,即C4(7)。

如图所示,外鳍四链列。分2种情况,要么是残缺的四链列成立,要么是这个鳍成立。因此删除掉都能删掉的部分,即C1(2)和C3(2)。
这些就是外鳍鱼的所有情况了,不过,它还能简化吗?请看下一节。 

刚才讲到了外鳍鱼,但是它还能不能再简化呢?当然是可以的。不过,这种鱼就更加奇怪了,而且长相变化多端。先来看一个“简化版”。

如盘面所示。这里有一个类似于外鳍鱼的形状:定义域为列2 & 列8,鳍位于D8。但是又有点不一样的地方,在离鳍最近的二链列的那只“腿”不见了,不过没关系。
根据外鳍鱼的推理方法,要么二链列成立,要么鳍成立。但是我们发现了一个问题,二链列缺了一只腿。此时我们回忆二链列的逻辑推理方法:如果这个时候,这个二链列在没有缺腿的情况时,我们是按照定义域来分别假设出两种不同的情况,最后会得到的填数情况,在这个二链列中,要么是左上(F2)和右下(H8)的2格填,要么是右上和左下(H2)2格填。现在右上角缺了一只腿,那么后者就不成立了。那么,综合外鳍鱼的说法,要么鳍成立,要么二链列的其中一种情况成立,也就是左上和右下成立。现在我们就要考虑一下,到底怎么推理了。
首先,思考一下位于二链列左下的单元格H2填入7,刚才说到要么是左上(F2)和右下(H8)的2格填,要么是鳍(D8)填。但是这都和H2没有关系。那么它能不能也删除掉呢?这显然是不可以的。因为它有可能单个成立,我们没有任何的理由说明它一定是错误的。
二链列只能删除删除域,也就是行F和行H的其余单元格的7;而鳍能够删除掉行D、列8 & 宫6内的7。但是不管是哪种情况,二链列始终都是成立的。因此删除域就是F7 & F9。F9已经有数字了,所以F7<>7。

这个叫做外鳍退化鱼的解法英文名叫做Sashimi Fish,其中的Sashimi其实是一个日语词汇的罗马音得到的,它的原意是“生鱼片”(罗马音:Sashimi,日语:刺身(さしみ))。起名的原因不明。
这种鱼由两部分构成,一部分是外鳍,而另一部分则是退化(Degenerated)后的鱼。退化鱼不能单独使用,因为没法正常地完成推理,缺少了一只腿使得原来的缺腿和其对角位置上的另外一个并不能组成一对了,因为其中的一格已经不存在了,所以这就需要和鳍一起进行推理才能得到结论了。这时候就总结一下这种鱼的推理思路:假设鳍成立和不成立,就分成了两种情况,这两种情况会同时导致鳍所在的宫和鱼的删除域的共同对应的位置不能填,因此删掉它们。而之前提到的“残缺鱼”是可以依然推理的,请注意“残缺”和“退化”这两个词语的区分。
这种外鳍退化鱼是最为标准的形式,当然,它也有其他的变异情况。

如所示,这是上一例中的另外一个外鳍退化鱼。这是由两个鱼鳍构成的外鳍退化鱼。这种情况同样只能删A4, A5(9)。我们按照外鳍退化鱼的思路,要么鳍和左下角(I2)成立,要么是A2, I6(9)成立。二链列中,就只剩下“仅I2成立”和“A2 & I8成立”这2种情况了。这样的二链列也是成立的,所以删除的是二链列原来的删除域,即行A和行I。但是那2个鳍使得最终的删除域变成了A4和A5,因此,A4, A5<>9。

这又是一种鱼变型,同刚才的推理方式,不过鳍并不是连在一起的。您可以自行进行推理,这同样是可以得到结论的。
了解到上述的思路后,接下来是带外鳍退化三链列。

原本是一个最简的三链列,定义域为列2、列5 & 列8,然而不巧的是,构成三链列的必要单元格之一(A2)缺失了。这样,三链列就退化了。假设鳍成立的话,行B、列2 & 宫1内的其他单元格内必然不填数字5;如果鳍不成立的话,对于这个退化三链列来说,I2一定为5,E5一定为5,A8一定为5。于是,就有这两种情况,要么B2=5,要么I2, E5, A8=5。无论如何,都会导致宫1 & 行A的公共部分都不能填入5。因此,A1, A3<>5。
但是,这个题目还可以删除掉B7(5)(图上未给出标注)。那么,这个又是怎么回事呢?
我们不妨切换一下思维,将图上A8(5)看成鳍,而B2(5)看作退化三链列的一部分。推理过程同刚才的盘面 37。不过由于鳍的位置切换到了宫3,所以三链列变成了宫3 & 行B的公共部分,所以B7 & B9不能填5。由于B9本来就没有候选数5,所以只有B7<>5。
像上面这种情况,当鱼鳍可以和鱼身的某一个位置互换,但仍然可以删数的,我们称为共轭鱼(Siamese Fish),也可以被称为摩天楼鱼。
这个就是外鳍退化鱼。当然,也存在四阶的情况,此处将给出一个例子如盘面 39所示,但推理不再展示,请自行推理。

在前面我们讲解了鱼的带鳍变形,但是它的形状其实也是可以变异的。

所示,“/”表示不能填某一个候选数(图中用字母x表示),这样一来,就是一个标准的三链列,定义域用橙色表示,而删除域则用蓝色表示。
我们尝试移动其中的一列,以致盘面所示情况。

现在三链列仍旧成立,只是由于x位置的移动,删除域发生的一点小变动,但并不影响。我们发现,当“合并”到一起的时候,就存在右边的两格在同一宫内了,此时我们思考,能否将定义域的其中一部分变化到宫内。
例如行B,我们去掉在行B的定义域,然后转化到宫3内。这个时候我们发现,x的位置可以在宫3的删除域内的任意位置都可以,而A9、B9、C9这3格是一定不可能存在x的,这是因为,如果这3格里面存在x了的话,这将导致这个鱼的形状会错开,以致不能删数。于是,就变成了这样。

如图所示,但是删除域是否依然没有变化呢?尚不知道。所以我们采用枚举的情况来假设一下。
由于宫3内有6个可能位置都能填x,那么我们一个一个假设,但是由于A7、B7、C7这3格的假设结果一定是等效的,A8、B8、C8这3格的假设结果一定也是等效的,所以最终就只有2种情况,加上宫3不填的可能,一共是3种情况,其推导过程如下所示:
当A7、B7、C7的其中之一填x的时候,此时我们发现,列7都不能填x了,因此,观察下方行E和行H,由于列7不填的关系,现在列E和列H就只有E2、E8、H2、H8这4格可以填x了,这个时候,刚好构成了一个二链列的结构,因此此时的删除域是列2和列8,但是由于A7、B7、C7存在一格填x的缘故,所以列7的其他位置也不能填x;
当A8、B8、C8的其中之一填x的时候,此时我们发现,列8都不能填x了,因此,观察下方行E和行H,由于列7不填的关系,现在列E和列H就只有E2、E7、H2、H7这4格可以填x了,这个时候,刚好构成了一个二链列的结构,因此此时的删除域是列2和列7,但是由于A8、B8、C8存在一格填x的缘故,所以列8的其他位置也不能填x;

但是,当宫3内的那6格一个x都不填的时候,此时我们发现,宫3将没有一个位置能填x了,因此这个情况是错误的。
此时我们发现,这3种情况除最后一种情况是错误的,被排除了之外,剩下2种情况都能导致列2、列7和列8不能填入x,所以说,原本的删除域其实是没有发生变化的。
盘面的结构,就被称为宫内鱼(Franken Fish)。宫内鱼的定义是:当某个鱼的定义域或删除域都是属于“a个行 + b个列 + c个宫”,且a和b不同时大于0且c > 0的,则就是宫内鱼。
我们很容易看出来,这样就直接不允许行和列不同时存在了,也就是行宫、列宫的组合。
那么它是否存在残缺的情况呢?是的。我们尝试从宫3开始下手。由于是分两种情况假设,因此至少列7和列8内都得有1个x,因此至少得有2个。但是能不能同行呢?可以,但是就恢复了原来的三链列了,因此此处取不同行的2格填x,因此变成下方的残缺结构:

这样就是一个残缺宫内三链列了。但仅仅只是缺少宫内的情况,其实行E和行H内也可以缺少部分位置的x。
我们说,链列残缺的充要条件是定义域和删除域的所有部分中都至少含有2个x,也就是说,图上的定义域(行E、行H、宫3)和删除域(列2、列8和列9)内的每个部分都需要出现至少2个x。那么现在请自行推理并寻找一下能够缺少的位置。 

 

如盘面所示,就是二链列转变到宫内二链列的图。而下面的这个图就是宫内二链列的残缺情况。

这就是一个宫内二链列的简图,不过我们发现,这个图里面,特别是行H的部分,会构成一个区块摒除法,直接可以删除一部分的数字,而且这种结构很容易被找到。所以我们说,宫内二链列完全等价于(级联)区块摒除法,此处可以看成全部都是只能删数的普通区块摒除法而构成的级联区块摒除法。

另外,宫内四链列的简图如下,由于结构复杂,所以不给出推导步骤,如盘面所示。

这样就构成了宫内四链列。但是要注意的是,四链列不止可以变成这样,其实左边还可以变形到宫内。例如下面就是其中的一个情况。

由于宫内二链列会被代替,因而此处不介绍此技巧的使用,只介绍宫内三链列以及宫内四链列及它们的变形。 

如果是一个标准的三链列的话,定义域是行C、行D、行G,或者说是行C、行D、行I,这两种明显都是不符合的。但是作为一个宫内三链列,这里的鱼是行C,行D,和宫9,有一行转变成了一个宫。
我们平时是怎么看一个三链列的呢?排列组合。3×3的剑鱼满的就是6种排布,当然如果有缺项,情况可能会少,但无论怎么排,行内剑鱼就删除列里的其他,列内剑鱼就删除行里的其他。
这个其实也是一样。宫9只有两种填法,填在G8,那么C4、C9、D4、D9这4格就是一个二链列;如果填在I9,那么C4、C8、D4、D8这4格也还是一个二链列。
但是无论是哪种情况,删除域依然不变,仍然是列4、列8和列9。因此,删除域内的所有的1都将被删除。

这个例子不好理解?我们再来找一个例子说明。

如图所示,它是一个定义域为行A、行I和宫5的三链列。按宫5分两类讨论填数情况。
. 如果D4|F4=6,则列4一定不能填入6,而对于定义域剩余部分,即行A和行I来说,就只剩下A6、A9、I6和I9这4格能够填6,这样就构成了一个二链列结构,删除掉这个二链列的删除域,即列6和列9,外带假设开始就能够得到的列4,一共是3个列;
. 如果D6|F6=6,则列6一定不能填入6,而对于定义域剩余部分,即行A和行I来说,就只剩下A4、A9、I4和I9这4格能够填6,这样就构成了一个二链列结构,删除掉这个二链列的删除域,即列4和列9,外带假设开始就能够得到的列6,一共是3个列;
. 而如果宫5内不填入6的话,这样一定不满足数独规则,于是直接排除此情况。
此时我们发现,一共这3种情况都会得到列4、列6、列9这3个列就是这个宫内三链列的删除域,因此删除域内将不再含有6。

宫内四链列和宫内三链列的逻辑推理思路差不多,但形状会变异得更加厉害。此处仅列举其中的一种较为标准的形状并予以分析。

这只“宫内水母”的定义域为行B、行F、行H和宫6。同样按照宫6分类讨论并假设。
如果E7=6,则B4、F3、F4、H3、H8能够构成一个退化三链列,而把E7(6)看作外鳍的话,那么这个退化三链列其实是可以用的,因此可以删除列3、列4、列8,再带上鳍所在的位置可以排除列7的所有6,其实定义域仍然没有发生变化;同理,如果C8|D8=6的话,则也是一个道理。 

宫内三链列也是可以有外鳍的,但是此时的观察就不容易了。现在我们来看一则例子。

定义域为行A、行E和宫7,而删除域则应该是列2、列3和列5。但是在A1出现了一个外鳍。那么我们分类讨论。如果外鳍成立,那么删除的则应该是A1所在的行A、列1、宫1;而外鳍不成立的话,那么就是一个宫内三链列,删删除域的所有3。两种情况都有可能,所以就只能删除共同对应的部分,因此就只剩下B2、B3、C2、C3这4格。而由于B2、B3已经填了数字的关系,因此,C2, C3<>3。
我们再来看一个变形更为厉害的例子。

这是一个定义域为行G、宫2和宫5的宫内三链列。非常奇怪的是它的定义域竟然包含两个宫。这其实也是被允许的,因为它也是可以删数字的。
在D5存在一个外鳍,当外鳍成立的时候,就只能删除掉D5所在的行D、列5和宫5。但是当外鳍不存在的时候,此时就是一个宫内三链列,因此按照鱼的删除域推导办法,我们能够得到它的删除域为列2、列4和列9。两者的共同对应部分只有单元格D9,因此,D9<>8。

下面还有2个例子,请自行推理与论证。图上已经给出定义域和删除域。

宫内四链列也是可以有外鳍的,但是由于四链列的变形过多,所以观察起来就更不容易了,但是形状也是非常美丽而又奇妙的。

定义域为行C、行E、行I和宫1,删除域为列1、列4、列7和列9。由于外鳍的存在,因此只能删除外鳍能对应的位置,即A4, A7, A9<>1。 

我们在最早说外鳍鱼的时候,就说过一个东西,外鳍被简称为鳍,因为外鳍不是全部的情况,这里就有一个新的概念,它被称为内鳍(Endo Fin)。它是如何形成的呢?我们来看一下。

这个三链列的定义域是行F、行G和行I。按道理说,我们是利用行F变换到宫4里面去,而现在我们现在不去管行F。而看行G。行G如果变到宫里面去,则应该为宫7。因此,就变成了下面这样。

我们尝试观察一下,这个更加奇怪的鱼的定义域现在应该是行F、行I和宫7。而此时我们观察到,行I和宫7有两个位置是重叠在一起了的,它们是I2和I3。重叠在一起了就得算两次,不然结构就会少2个填数情况,我们类比之前的不重叠的宫内三链列。以前的宫内三链列一共有12种填数情况,而现在由于重叠了之后,少了2种情况,而它们只被计算了1次,所以现在就只有10种情况了。
我们标注用“@”符号来代替重叠的部分,于是就变成了下面这样。

这两个被标注了“@”符号而不是“x”符号的被称为内鳍。内鳍我们要算两次,一次作为鱼身,也就是x,一次是鱼鳍,不过这鱼鳍奇怪的是它长在鱼的内部了,因此也就叫内鳍了。
我们说,内鳍也是一种鳍,虽然它是重叠起来了的,是鱼身的一部分,但是由于这种结构的特殊性,内鳍是算成两次的,所以,删数的话还是得看内鳍和删除域的共同对应的部分。
但是我们来看盘面,由于有2个内鳍,还要删这2个内鳍和删除域共同对应的部分,其实是完全没有共同对应的部分的,因此,这种结构只能说是理论上的存在,而并不能起到删数的效果。所以只能残缺。
那么,残缺情况是怎么样的呢?如下面给出的情况所示。

这样的结构就是可行的。了解到了这一点了之后,我们来看看例子。 

内鳍在上一节里面讲过了形成情况,现在我们来看一些内鳍宫内三链列的例子。

这个关于3的宫内三链列的定义域为行F、行I和宫7。而行I和宫7存在重叠部分,且重叠部分刚好有1个位置(单元格I3)有候选数3。那么它就是内鳍。
我们进行分类讨论。
 当I3这个内鳍成立的时候,删掉I3的所有共轭单元格;
 当I3这个内鳍不成立的时候,由于我们说内鳍算两次,一次鱼身一次鳍,因此它其实仍然算鱼身的一部分。因此并没有直接不存在,所以没有内鳍的时候,它就是一个标准的宫内三链列。可以删除删除域内的所有候选数3,此时的删除域应该是列2、列3和列5。
仅存在这2种情况,那么至少有一种情况要成立,所以要删除这两种情况共同对应的位置,即列3的所有候选数3。
对比这一盘面和上一盘面的宫内三链列的形状,其实是类似的,只是有一些许的不一致而已。

下面再来介绍一个内鳍宫内四链列的例子。

如图所示,这个宫内四链列的定义域为行D、行F、行G和宫8。而宫8和行G有重叠部分,且刚好只有1个。因此,我们进行分类讨论。
如果内鳍G4(5)为真,那么能删掉G4的20个共轭单元格;
如果内鳍为假,那么就是一个标准的残缺内鳍宫内四链列。那么删除域就应该是列4、列6、列8和宫4。
而这两种情况必有一个要成立,因此删掉这两种情况都能对应到的部分,也就是列4。所以列4内的候选数5可以被删除。

至此,宫内鱼的内容就全部结束了。但是,鱼远远不止这一点。还有一个变异鱼也是非常的神奇。 

之前我们讲到了宫内鱼,现在又有一种新型形状变异鱼。
我们之前说到宫内鱼的定义。但是,宫内鱼里面不含有一种情况,就是“行 + 列”的情况。这种情况是存在的吗?当然,如下面这个结构就是个例外。

这是一个定义域为行A、行I和宫6的宫内鱼。很明显,我们能够利用宫内鱼的推理得到它的删除域,即列2、列8和列9。
我们发现,按照宫内鱼的逻辑,是一个一个的假设得到的结论。我们现在把它看成一个整体。
很明显,这6个位置看成整体之后,和旁边的D7、E7、F7这3个位置是相反的填数关系。但是我们发现,刚好能找到列7的B7、C7、G7和H7这4个位置也可以和D7、E7、F7这3个位置构成相反的填数关系。于是,形状就变成了这样。

于是我们就简单地变成了这样。此时我们发现,这个时候,宫6的6个x全部转化到列7的4个x了。此时,定义域就发生了变化。此时,定义域变成了行A、行I和列7,而删除域则变成了列2、宫3和宫9。
但是,这样的话,就很奇怪了。定义域变成了行和列。这并不复合宫内鱼的定义。因为这里定义域内出现了行和列同时存在的情况。那么,这种不属于宫内鱼的新型鱼叫做交叉鱼(Mutant Fish)。
那么交叉鱼的定义是如何的呢?交叉鱼的定义是:当定义域或删除域同时含有行和列的时候,此时的鱼就是交叉鱼。但是需要注意的是,行、列、宫全部存在也算同时含有行和列。
所以,很容易理解的是,交叉鱼的定义域必须同时含有行和列,才不属于宫内鱼的定义。我们要注意一点,交叉鱼的定义其实是宫内鱼的互补情况。但是请记住,交叉鱼的一个口诀,即“行列必交叉,交叉必删宫”。意思就是,定义域同时含有行和列的时候,就是交叉鱼了,这前半部分就是交叉鱼的定义了;而后半部分则意味着,行列交叉的位置,如盘面 272的A7和I7这2格,这2格所在的宫也是删除域的一部分。也就是说,A7在宫3内,而I7在宫9内,所以宫3和宫9也是删除域的一部分。这个口诀将非常有用。

接下来,我们再来看看四链列的情况。


这是之前的盘面,很明显,这个是一个定义域为行D、行F、行I和宫3的宫内四链列。

现在我们变化一下,我们发现,存在于宫内的定义域只有宫3,而我们发现A9、B9、C9这3个位置和另外6格的填数是相对相反的填数关系。我们把宫内的填入情况转换到列9中去。于是就变成了这样:

这个是现在的,我们发现,现在的定义域变成了行D、行F、行H和列9。这也是不满足宫内鱼的定义的,所以也算作交叉鱼。
而它们都能残缺吗?当然。很多时候我们都不能找到这种完美的鱼,而一般都是残缺的。那么残缺需要满足什么样的条件呢?请自行思考。
接下来的一节我将讲解一些例子。 

这是一个定义域为行B、行F和列6的鱼。根据我们的口诀,我们发现,定义域的确同时含有行和列,因此是交叉鱼。而交叉必然删掉宫,所以说,我们观察这个鱼的交叉点,即B6和F6。由于这2格分属宫2和宫5,所以宫2和宫5也是删除域的一部分。而我们说这个是可以用宫内鱼转换得到的,所以说,原来的宫内鱼其实还可以删掉列3,于是删除域就改变成为了列3、宫2和宫5。这也就是现在的交叉鱼的删除域了。
很明显,它也是残缺的,而刚好我们发现,这只交叉鱼的定义域和删除域的每一个部分均刚好只包含2个候选数5,这也是残缺的最少情况。

这是一个简单的交叉四链列,定义域为行B、行C、行H和列7,而删除域为列2、列5、宫3和宫9。

这也是一个简单的交叉四链列,定义域为行A、行E、行I和列1,而删除域是列5、列8、宫4和宫7。

外鳍交叉鱼也就是也就是交叉鱼加入了外鳍的形式。但是,需要注意的一点是,外鳍的位置也只能存在于定义域中。

很明显这是一个交叉三链列,定义域为行C、行I和列7 。我们也能很快速地用推导的方式得到它。那么很明显,我们可以直接得到的是删除域,即为列3、宫3和宫9。
但是很快我们发现,图中有一个多出来的E7(4),它的位置刚好也在定义域内,但是它却在原本恢复原来宫内三链列的宫内“外部”区域。也就是说,恢复成原本宫内三链列的时候,列7就变化到宫6内的D8、D9、E8、F9这4格。但是,D7、E7、F7这3格原本也是不存在候选数4的,可是,现在出现了这个4,原来的宫内三链列只能被当做外鳍,那么现在的交叉三链列也只能当成是外鳍。于是此时就只能删掉外鳍能够对应到的部分,亦即E3(4)。
当然,也有交叉四链列,由于出现频率极低,此处仅给出一例,但不予推理,请自行观察其逻辑。

我们思考一个问题,交叉鱼是否也有内鳍呢?答案显然是存在的。

图中有一个内鳍,是G8(5)。乍一看有点像宫内鱼,但是由于删除域既有行又有列,所以是交叉鱼。

是不是交叉鱼也只能是行列交叉呢?当然不止,也能行列宫交叉,不过此处将不再举例。 

在形状变异的鱼中,有一个现象很奇特,鱼身的某个位置会被自己的这种结构删掉。我们来看看它是怎么形成的。

这是一个宫内鱼,定义域都是行,而删除域中有列也有宫。此时我们发现,删除域发生了重叠,即列1和宫4。原来的例子中,定义域和删除域都是没有重叠现象的,而且我们前面只见过定义域重叠。那么删除域重叠会出现什么样子的效果呢?
当删除域重叠的时候,重叠部分如果含有鱼身的一部分,那么也应该被删除,也就是说,如上图所示,删除域重叠部分有D1、E1、F1这3格(图中用 *x 标注),而这3格内,E1和F1则是鱼身的一部分,因此,它们其实也可以被删除。此处不予证明,您可以利用环的性质进行证明。
我们称,鱼身自我删除的情况也是一种鳍,它被称为自噬鳍(Cannibalistic Fin),则这种现象,我们称为自噬现象,简称自噬

在讲解了自噬鳍的形成之后,我们来看看例子。

这是一只交叉鱼,因为定义域同时有行有列。但是删除域的行列交叉处,也同样存在鱼身的一部分。那么根据鱼的逻辑,这一部分也是可以被删除的。这只鱼里面只存在一处自噬。

至此,鱼的所有内容就全部结束了。其实,鱼还有很多话题,比如鱼的不饱和性的探讨(即删除域数量大于定义域数量的鱼的使用),以及这些鱼的使用条件和范围,它们的删数原理,这里只为大家引导一个学习方向,欢迎大家的讨论学习。 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
数独解法普通模式
如何玩数独游戏-数独入门
这几个建议可以让你选购好的七彩神仙鱼
小向难死你系列NO#0006解答
周总结•第3期|神兽吐槽大会
偶然钓到一条奇特的鱼,长长鱼鳍还会叫
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服