鱼类技巧
基础鱼
总览
鱼 (Fish)是数独中级水平必须掌握的核心技巧,在解题时经常能发挥关键作用。
和 隐集 类似, 鱼 也是通过观察候选数在 区域 中的分布来消除候选数。不同之处在于, 鱼 技巧需要观察两组相交的 区域 ,我们把它们分别称为 基础区域 (Base Regions)和 覆盖区域 (Cover Regions)。
鱼 技巧根据 基础区域 的数量来划分等级 n ,下面我们通过具体例子来学习。
独眼鱼
独眼鱼 (Cyclopsfish)是 鱼 n = 1 的情况。也就是 1 个 基础区域 中候选数所出现的格子,被 1 个 覆盖区域 覆盖。
说明:其实 独眼鱼 就是我们之前学过的 交叉 ,具体来说,可能是 交叉消除行 、 交叉消除列 或 交叉消除宫 。
图中候选数 4 在 基础区域 列G (蓝色区域)中出现的格子为 {G4, G5} (图中为绿色候选数),全部被 覆盖区域 宫6 (绿色区域)覆盖。
独眼鱼 消除候选数的原理是什么?
可以这样理解:候选数 4 在 基础区域 中出现的位置,全部都在 基础区域 和 覆盖区域 的交集里(也就是格子 {G4, G5, G6} )。
根据数独规则,每个区域都必须填写 1 个 4 。因为 基础区域 列G 中的 候选数 4 只出现在交集格子里,所以交集里必定要填写 1 个 4 。
同样, 覆盖区域 宫6 里也必须要填写 1 个 4 。既然交集里已经填写 1 个 4 了,那么 宫6 中其他格子就不能再填 4 ,所以 宫6 中其他格子的候选数 4 可以消除。
推广
上面的消除逻辑可以推广到 n 个 基础区域 和 n 个 覆盖区域 的情况。假设候选数为 x 。
鱼 的一般定义:
对于一个候选数 x ,如果它在 n 个 同类型 (不相交)的 基础区域 中出现的格子,全部都被另外 n 个 同类型 (不相交)的 覆盖区域 覆盖,这种模式就称为 鱼 。
鱼 的一般消除逻辑:
根据数独规则, n 个 基础区域 中必须填写 n 个 x ,而候选数 x 都出现在 基础区域 和 覆盖区域 的交集里,所以交集里要填写 n 个 x 。
同样, n 个 覆盖区域 中也必须填写 n 个 x 。既然交集里已经填写 n 个 x 了,那么 覆盖区域 中交集外的格子就不能再填 x ,所以 覆盖区域 中交集外的格子中的候选数 x 可以消除。
这就是鱼的核心逻辑,下面我们来看更多例子。
X翼
X翼 (X-Wing)是 鱼 n = 2 的情况。
图中候选数 5 在 基础区域 行3 和 行5 (蓝色区域)中出现的格子,全部被 覆盖区域 列C 和 列E (绿色区域)覆盖。
也就是说候选数 5 在 基础区域 中只出现在 基础区域 和 覆盖区域 的交集 {C3, E3, C5, E5} 里。
因此, 覆盖区域 中交集外的格子不能填 5 。所以 C6 和 E6 中的候选数 5 可以消除。
图中候选数 4 在 基础区域 列E 和 列H (蓝色区域)中出现的格子,全部被 覆盖区域 行3 和 行4 (绿色区域)覆盖。
也就是说候选数 4 在 基础区域 中只出现在 基础区域 和 覆盖区域 的交集 {E3, H3, E4, H4} 里。
因此, 覆盖区域 中交集外的格子不能填 4 。所以 A3 、 B3 和 C3 中的候选数 4 可以消除。
箭鱼
箭鱼 (Swordfish)是 鱼 n = 3 的情况。
图中候选数 1 在 基础区域 行2 、 行4 和 行7 (蓝色区域)中出现的格子,全部被 覆盖区域 列B 、 列E 和 列G (绿色区域)覆盖。
也就是说候选数 1 在 基础区域 中只出现在 基础区域 和 覆盖区域 的交集 {B2, E2, G2, B4, E4, G4, B7, E7, G7} 里。
因此, 覆盖区域 中交集外的格子不能填 1 。所以 G3 中的候选数 1 可以消除。
图中候选数 9 在 基础区域 行3 、 行5 和 行7 (蓝色区域)中出现的格子,全部被 覆盖区域 列C 、 列E 和 列I (绿色区域)覆盖。
也就是说候选数 9 在 基础区域 中只出现在 基础区域 和 覆盖区域 的交集 {C3, E3, I3, C5, E5, I5, C7, E7, I7} 里。
因此, 覆盖区域 中交集外的格子不能填 9 。所以 I2 、 C6 、 E6 和 C9 中的候选数 9 可以消除。
水母
水母 (Jellyfish)是 鱼 n = 4 的情况。
图中候选数 1 在 基础区域 行1 、 行4 、 行5 和 行7 (蓝色区域)中出现的格子,全部被 覆盖区域 列B 、 列C 、 列G 和 列I (绿色区域)覆盖。
也就是说候选数 1 在 基础区域 中只出现在 基础区域 和 覆盖区域 的交集 {B1, C1, G1, I1, B4, C4, G4, I4, B5, C5, G5, I5, B7, C7, G7, I7} 里。
因此, 覆盖区域 中交集外的格子不能填 1 。所以 C2 和 I8 中的候选数 1 可以消除。
图中候选数 6 在 基础区域 行3 、 行5 、 行6 和 行8 (蓝色区域)中出现的格子,全部被 覆盖区域 列B 、 列C 、 列F 和 列I (绿色区域)覆盖。
也就是说候选数 6 在 基础区域 中只出现在 基础区域 和 覆盖区域 的交集 {B3, C3, F3, I3, B5, C5, F5, I5, B6, C6, F6, I6, B8, C8, F8, I8} 里。
因此, 覆盖区域 中交集外的格子不能填 6 。所以 B4 和 C7 中的候选数 6 可以消除。
带鳍鱼
总览
带鳍鱼 (Finned Fish)是普通 鱼 技巧的一种变体。
在寻找 鱼 模式时,有时 覆盖区域 无法完全覆盖 基础区域 中的所有候选数。这些没被覆盖的候选数就叫 鳍 (Fin),含有 鳍 的格子我们称为 鳍格子 (Fin Cell)。我们仍然有可能消除候选数。
带鳍X翼
让我们通过一个例子来学习 带鳍鱼 技巧。
图中, 基础区域 (蓝色区域)是 行4 和 行9 , 覆盖区域 (绿色区域)是 列B 和 列F ,候选数是 7 。我们观察到 E9 中的候选数 7 (蓝色候选数)虽然在 基础区域 中,却没被覆盖。
这种在 基础区域 中未被覆盖的候选数就叫 外鳍 (Exo Fin),是 鳍 (Fin)的一种。
那怎么消除呢?我们可以这样理解:
第一种情况:如果所有 鳍格子 都不填 7 ,那这就是一个普通的 X翼 ,按正常方式消除橘色和红色的候选数。
第二种情况:如果 鳍格子 里至少有一个填 7 ,那么,任何能同时看到所有 鳍格子 的格子,里面的 7 都可以消除。
这两种情况总有一个是对的。所以,能被两种情况同时消除的 7 ,肯定可以去掉。
简单说,就是普通 鱼 要消除候选数的格子中,那些能同时看到所有 鳍格子 的格子,里面的 7 可以消除。
因此, F8 中的 7 可以消除,因为 F8 既是普通 X翼 要消除候选数的格子,又能看到唯一的 鳍格子 {E9} 。
我们再看第二个例子。
图中, 基础区域 (蓝色区域)是 列C 和 列F , 覆盖区域 (绿色区域)是 行6 和 行8 ,候选数是 2 。 C5 中的候选数 2 (蓝色候选数)未被覆盖,成为 鳍 。
普通消除会去掉 A8 和 A6 中的 2 (橘色和红色候选数)。其中只有 A6 能看到唯一的 鳍格子 {C5} ,所以 A6 中的 2 可以消除。
带鳍箭鱼
图中, 基础区域 (蓝色区域)是 列B 、 列G 和 列I , 覆盖区域 (绿色区域)是 行3 、 行4 和 行8 ,候选数是 2 。 {G5, I5, G6} 中的候选数 2 (蓝色候选数)未被覆盖,成为 鳍 。
普通消除会去掉 {E3, F3, H3, C4, H4} 中的 2 (橘色和红色候选数)。其中只有 H4 能同时看到所有 鳍格子 {G5, I5, G6} ,所以 H4 中的 2 可以消除。
图中, 基础区域 (蓝色区域)是 行1 、 行3 和 行8 , 覆盖区域 (绿色区域)是 列B 、 列F 和 列H ,候选数是 4 。 {E1, D3} 中的候选数 4 (蓝色候选数)未被覆盖,成为 鳍 。
普通消除会去掉 {F2, F5, F7, B9, F9} 中的 4 (橘色和红色候选数)。其中只有 F2 能同时看到所有 鳍格子 {E1, D3} ,所以 F2 中的 4 可以消除。
带鳍水母
图中, 基础区域 (蓝色区域)是 行1 、 行4 、 行6 和 行8 , 覆盖区域 (绿色区域)是 列B 、 列D 、 列F 和 列H ,候选数是 3 。 {G4, I6} 中的候选数 3 (蓝色候选数)未被覆盖,成为 鳍 。
普通消除会去掉 {B2, F2, H2, B3, D3, F3, H3, F5, H5, D7, D9, H9} 中的 3 (橘色和红色候选数)。其中只有 H5 能同时看到所有 鳍格子 {G4, I6} ,所以 H5 中的 3 可以消除。
变异鱼(选学)
我们将在未来添加关于 变异鱼 的内容。
鱼技巧理论(选学)
看的定义
当两个格子 和 ,,同时属于区域时,我们称可以看到, 且可以看到,或者说和相互可见。
注意,在我们的定义中,一个格子不可以看到自己。
基础鱼的定义
基础鱼 是指对于候选数 ,存在一个区域集合(基础区域)(里面的区域不相交), 在 中所在格子集为 。存在另外一个区域集合(覆盖区域)(里面的区域不相交), 在 中所在格子集合为。且 ,且 ,则这个形式称为鱼。
之所以称为基础鱼,是因为要求基础区域之间不相交,覆盖区域之间不相交,且要求覆盖区域需要覆盖所有基础区域中的 。这些条件都不是必须满足的。
基础鱼技巧的证明
命题 :对候选数 ,存在基础区域集合 和覆盖区域集合 形成鱼(简单),设 所在的格子集合分别为 和 ,则中的候选数 可以消除。
证明 :
设
根据数独规则,数字 在每个区域中都需要正好填写一次。
因为 中有 个相互不相交的区域,所以, 中正好要填写 个 ,也就是 中正好要填写 个 。
同理可知 中也正好要填写 个 。
而 ,所以我们知道, 不可能填写在 中。
所以 中的候选数可以消除。
一般鱼定义
一般鱼 是指对于候选数 ,存在一个区域集合(基础区域), 在 中所在格子集为 。存在另外一个区域集合(覆盖区域), 在 中所在格子集合为。且 ,则这个形式称为鱼。
一般和基础鱼的区别主要是,基础区域允许相交,覆盖区域允许相交,且没有 的条件。
一般鱼技巧的证明
命题 :对候选数 ,存在基础区域集合 和覆盖区域集合 形成一般鱼。
设 在 和 中所在的格子集合分别为 和 。
设 。
设 为所有中存在于多个基础区域中的格子集。
设 为中存在于多个覆盖区域中的格子集。
设 。
设 。
设 表示所有能同时看到 的格子的格子集
若 ,则可以消除 中的 。
若 ,则可以消除 的格子中的 。
证明 :
设
情况 1: 假设 不填写在 中
根据数独规则,每个区域正好需要填写1个
因为 不填写在 中,所以 所填写的格子都只属于1个基础区域(也就是不属于任何两个基础区域之间的交集)
所以, 中正好要填写 个 。
因为 中没有填写 ,
所以, 实际覆盖了 中填写 的格子
所以 中至少填写 个 。
而根据数独规则,显然 中最多填写 个
所以 正好填写了 个 。
所以 中填写的 的格子不可能填写在 中(即不可能填写在任何两个覆盖区域的交集),否则 中填写的 的个数达不到 。
所以可以消除 中的 。
另外 中也不可能填写 ,否则它们两个中填写的 的数量不可能相等
所以可以消除 中的
所以,合并得
中的 可以消除
情况 2: 假设 在中至少填写1次
则所有 中的可以消除
综合以上两种情况:
若 ,则以上第2种情况是不可能的,只可能是第1种情况,所以, 中的 可以消除。
若 ,
如果一个格子同时属于 和 ,则这个格子中的 无论在以上哪种情况下都可以被消除
即 中的 可以消除