[数独高级技巧] 鱼

小向爱数独
由 小向爱数独 在 解题技巧,
我们在之前的内容之中学到了数组,那么这里将为您拓展一种新的技巧,这种技巧称为鱼。 当填到这里的时候,发现数对已经填不下去了。此时,我们可以观察到,在行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)或链列。
  • 16 篇 回复