鱼
基本鱼
数独中的“鱼”是指由n行和n列交叉形成的网格结构。鱼技巧是利用某个候选数x上的鱼结构来进行候选数删除的技巧。
如果在某n行(或列)中,候选数x恰好只可能出现在n列(或行)中,则鱼结构成立。这n行(或列)称为“基础集”。基础集中x可能出现的n列(或行)称为“覆盖集”。基础集与覆盖集交叉的n × n个格子称作“鱼格”。
一旦鱼结构成立,基础集中的每一行(或列)最终都必须填入一个x,共计n个。它们全部位于覆盖集中,而数独规定同一列(或行)不能出现两个x,因此覆盖集中的每一列(或行)恰好容纳一个x。所以,覆盖集中不属于基础集的单元格里不能再填入x;如果这些格子里有候选数x,可以将其删除。
鱼技巧并不要求候选数x在基础集中的每个区域里都精确地出现n次,只要求它一旦出现,就恰好落在覆盖集中即可。不过,一般会要求候选数x在基础集中的每个区域里至少出现2次;否则,我们称这个鱼结构会退化。
这里,基础集或覆盖集中包含的行或列数量n被称作鱼的“大小”或“阶数”,所以在涉及大小时,一个鱼可以称作“n阶鱼”。由于鱼的大小会影响该技巧的发现难度,所以一般会把不同大小的鱼划分为不同的技巧。
理论上,n可以是1到9中的任何一个整数。但如果n=1,一行和一列的交叉就退化成了单个单元格,应该使用单数技巧进行删数;如果n=9,则基础集已覆盖全部行(或列),覆盖集中没有基础集之外的格子,因此无法通过鱼规则删数。而且对于供人类使用的实用解题技巧来说,当n ≥ 5时,就很难发现符合要求的鱼型了,通常应考虑使用其他技巧来简化局面。
带鳍鱼
有的时候,可能找不到直观的n行(或列)基础集,其中候选数x恰好只能出现在n列(或行)的覆盖集中——基础集中可能会多出来一些额外的候选数x,但仍然有可能通过分析这些额外的候选数x来进行删数。
这样的鱼型只能通过分别选取n个包含候选数x的行(或列)和n个包含x的列(或行)作为基础集和覆盖集来进行进一步分析。在分析过程中,基础集中的额外候选数(即不在覆盖集中的候选数)称作“鳍”或“鱼鳍”,鱼鳍所在的单元格称作“鱼鳍格”。
如果将关注点放在鳍上,则可以得到仅有的两种可能性——要么所有鱼鳍格里均不填x,要么某些鱼鳍格里填x。
如果令待删格同时满足“位于覆盖集内但不属于基础集”以及“能看到所有鱼鳍”两个条件,则可以进行如下分析:
- 如果所有鱼鳍格里均不填
x,则基础集与覆盖集可以形成一个鱼型(可以是退化鱼),进而可以通过前面介绍的鱼技巧将待删格中的x删除。 - 如果某些鱼鳍格里填
x,则根据数独规则可以确定待删格里不能填x——即也可以将待删格中的x删除。
结论就是,覆盖集中不在基础集内且能看到所有鱼鳍的单元格中,可以删除候选数x。
鱼的退化
当一个鱼结构符合条件——即基础集中的候选数x只能出现在覆盖集中——时,有的时候会发生基础集中的某一区域中x只出现一次的情况。一般来说,这种情况不会被当做n阶鱼,而是首先把该区域中单独的x作为单数填为答案数,然后鱼格中的其他x会“退化”为(n-1)阶鱼,甚至可能引发更多单数的出现,进而退化成更低阶的鱼,甚至全部退化为单数,完全用不上基本鱼技巧。
在上面的例子中,左图是一个数字3上的退化剑鱼,基础集中的第8行只有一个鱼格可以填3。在将其当做单数填数后,可以得到右图的样子,剑鱼(三阶鱼)退化为了X翼(二阶鱼),但覆盖集中的R7C7中仍然可以删掉候选数3。
在上面的例子中,左图是一个数字5上的退化X翼,基础集中的第6行只有一个鱼格可以填5。在将其当做单数填数后,可以得到右图的样子,X翼(二阶鱼)退化为了R2C1里的单数,但覆盖集中的R4C1中仍然可以删掉候选数5。
但是退化鱼依然是满足条件的鱼结构——n行(或列)的基础集中候选数x只能出现在n列(或行)的覆盖集中,因此依然可以确定覆盖集中其他的x可以被删除。
刺身鱼
一般不会将退化鱼识别为某阶上的基本鱼,而是首先运用单数技巧填数简化盘面,再识别更低阶的鱼甚至其他单数。
但在带鳍鱼的情况下,这里讨论的退化鱼是在“假设所有鱼鳍均不填x”的分支中形成的,不能将这个假设分支中的单数直接作为答案数填入盘面。因此,带鳍鱼中除鱼鳍之外的部分是可以出现退化鱼的。
一个带鳍鱼如果鱼鳍之外的部分是退化鱼,则称之为“刺身鱼”。
刺身鱼的删数规则与普通带鳍鱼一样——待删格位于覆盖集中但不属于基础集,且能同时看到所有鱼鳍格,可以删掉待删格中的候选数。因此这里只将刺身鱼当做带鳍鱼的一种特例,没有列为单独的技巧。