数独中的剑鱼技巧
剑鱼(Swordfish)是X-Wing的进一步扩展,也是一种经典的鱼形技巧。它追踪同一个候选数在3个基准单位与3个覆盖单位中的分布,并利用锁定关系排除其他位置的该候选数。
什么是剑鱼?
以行型剑鱼为例:选择3行,如果目标候选数在每一行都只出现在相同的3列范围内,并且3列都被这些候选位置覆盖,那么这3行与3列构成剑鱼。
每一条基准行不一定都要出现3次候选数,出现2次也可以。关键是3行中的所有目标候选位置合起来只占用3列。
确认后,可以从这3个覆盖列的其他行中删除目标候选数。列型剑鱼完全对称:交换行和列即可。
示例:候选数5的行型剑鱼
观察候选数5在以下3行中的位置:
- 第2行:R2C2、R2C6;
- 第5行:R5C2、R5C9;
- 第8行:R8C6、R8C9。
这6个候选位置全部位于第2列、第6列和第9列,因此形成行型剑鱼。3个数字5最终必须分别落在这3行与3列的交点中。
图片说明:黄色格是剑鱼的候选位置;红色叉号表示第2列、第6列和第9列其他行中可以删除的候选数5。
如何寻找剑鱼?
- 选择一个候选数字。
- 找出该候选数只出现2次或3次的行。
- 尝试选择3行,检查所有位置是否合起来只占用3列。
- 确认3个覆盖列都至少包含一个目标候选位置。
- 从这3列的其他行中删除目标候选数。
如果按行没有发现,可以逐列进行同样的检查。实际解题时,先掌握X-Wing会更容易理解剑鱼的基准单位和覆盖单位。
为什么剑鱼成立?
3个基准行都必须各放入一个目标数字,而它们的所有候选位置都被限制在3个覆盖列中。因此,这3列中的目标数字必然由这些交点占用,覆盖列的其他格子不可能再填入该数字。
基准单位与覆盖单位
理解剑鱼时,最重要的是区分两类单位。主动选择并进行比较的3行称为基准单位;承载这些候选位置的3列称为覆盖单位。若从列开始寻找,则3列是基准单位,3行是覆盖单位。
基准单位中的候选分布不必对称,也不必形成整齐的9个交点。示例中的每行只有2个候选位置,仍然有效,因为6个位置共同覆盖了3列,而且每个覆盖列都参与了模式。判断时应关注候选位置的并集,而不是图形是否美观。
行型剑鱼与列型剑鱼
行型剑鱼从3行出发,在3列中锁定候选数,排除发生在覆盖列内;列型剑鱼从3列出发,在3行中锁定候选数,排除发生在覆盖行内。两者逻辑完全相同,只是观察方向相反。
如果某个数字在多行中候选位置很少,可优先寻找行型;如果它在多列中更集中,则改为寻找列型。切换观察方向往往比继续盯着同一组候选位置更有效。
常见误区
误区一:每一行都必须正好有3个候选位置
不需要。每条基准行可以有2个或3个目标候选位置,只要3行的候选位置并集正好位于3列内。
误区二:从剑鱼交点中删除候选数
不能删除构成剑鱼的目标候选数。应删除的是3个覆盖列中、基准行以外的同一候选数。
误区三:3行中的候选位置占用4列也算剑鱼
标准剑鱼要求3个基准单位只对应3个覆盖单位。如果涉及4列,锁定关系不足,不能按剑鱼排除。
常见问题
什么是数独中的剑鱼?
当同一候选数在3行中只分布于相同的3列内时,就可能形成行型剑鱼;交换行列可得到列型剑鱼。
剑鱼和X-Wing有什么区别?
X-Wing使用2个基准单位和2个覆盖单位,剑鱼把相同的鱼形逻辑扩展到3个基准单位和3个覆盖单位。
确认剑鱼后可以删除哪些候选数?
行型剑鱼从3个覆盖列的其他格子中删除目标候选数;列型剑鱼则从3个覆盖行的其他格子中删除。
