术语Fish代表了一组工作原理相同的关于特定候选数的解题技巧(Fish技巧直接产生自数独规则——每个单元内的数字都不能重复),Fish家族成员包括“体型”从小到大的X-Wing、Swordfish、 Jellyfish、Squirmbag、 Whale以及Leviathan(后三者在人工解题过程中很少用到,本篇不做展开),以及由标准Fish结构延伸出来的Finned/Sashimi Fish。

X-Wing——若数字A在某两行(列)中只能存在于相同的两列(行),则这两列(行)的其他格都不能有A。

其原理很简单,如图1所示,我们将数字A只能存在于两个位置的行(列)称为base集(黄色),把与之垂直方向的列(行)称为cover集。显然,根据数独规则,在Base集中要吗是红色的一组A成立,要吗是蓝色的一组A成立,无论哪个颜色的A成立,都可以相应删去cover集行或列中其他格(橙色区域)的数字A。在具体操作时,大家可以将步骤简化为,在数独盘势中寻找一个数字A的2行×2列的矩形,若A在某个方向(横、纵)的行、列中只能出现于两个位置,就删去与之垂直方向的行、列中其他格的数字A。

 
图1 X-Wing01

​来看下面的实例。图2中数字5在R2和R5行中均只能存在于C5和C8列,则R2和R5的5构成Base集, C5和C8列的5为cover集,可删去cover集其他格中的的5(红色)。

 
图2 X-Wing02

​图3中数字1在C1和C5列均只能存在于R2和R5行,base集=C15{1}, cover集=R25{1}, 可删去cover集其他格中的1(红色)。

 
图3 X-Wing03

​Swordfish——若数字A在某三行(列)中均只能存在于相同的三列(行),则这三列(行)的其他格都不能有A。

 
图4 Swordfish01

​本篇开头已经提到,Fish家族的解题技巧都有着同样的工作原理,只是“体型”大小不同。X-Wing是2行2列2×2的矩形,Swordfish则将其扩展到3行3列。如图4中,黄色行列为base集(数字A在该单元仅能出现于3个位置),与之垂直的方向为cover集。根据数独规则,数字A在这个3行3列的矩形中,必然是每行每列出现且仅能出现1次,故可删去cover集中其他格内(橙色区域)的A。

需要注意的是,在Swordfish结构中,base集每个行列的A未必要出满3个位置,如下图,只要满足3行3列,且base集中的A在垂直方向只能出现于cover集内,依然是有效的Swordfish结构(其他Fish结构同样如此)。

 
图5 Swordfish02

​来看两个Swordfish的实例。

 
图6 Swordfish03

​图6中,数字2在R2、R3和R9中(base集),均只能出现C1、C5和C8列(cover集),则可删去cover集其他格内的2(红色)。

 
图7 Swordfish04

​图7中,base集=R247{4},cover集=C235{4},可删去cover集红色的4。

Jellyfish——若数字A在某四行(列)中均只能存在于相同的四列(行),则这四列(行)的其他格都不能有A。

Jellyfish进一步将Fish结构扩大到4行4列,我们直接看实例。

 
图8 Jellyfish01

​图8中,数字7在R3、R4、R6和R7(base集)中,只能出现于C1、C2、C5和C9(cover集),可删去cover集其他格的7(红色)。

 
图9 Jellyfish02

​图9中,base集=R1367{7},cover集=C2589{7},删去cover集其他格内红色的7。

Finned/Sashimi Fish

大家都知道六书中有“指事”一法,“指事者,视而可识,察而见意”, 如“刃”字是在“刀”的锋利处加上一点,以作标示;“凶”字则是在陷阱处加上交叉符号以作提醒。数独解题技巧中的Finned/Sashimi Fish与造字法中的“指事”有着异曲同工之妙。我们来看一个例子:

 
图10 X-Wing

上图是一个标准的X-Wing结构,可删去C3、C5中红色的9。但是,如果X-Wing这条鱼在base集多出来一条鳍(fin)怎么办,比如在R2C1格中加上1个9,变成图11这样:

 
图11 Finned X-Wing

我们可以这样推导:1)如果R2C1中多出来的9不成立,则局面变为图10中的标准X-Wing结构,可删去R3C3、R5C3、R5C5中的9;2)如果R2C1中的9成立,则可删去与之同一单元的R2C35、R3C3中的9。结合上述两种可能,可以发现,无论R2C1中的9是否成立,都可以删去R3C3中的9

直观来看,多出来的fin将Fish结构cover集的删减范围限制在它所在的宫中,起到了“指事”法标识、定位的作用,我们把这种多长了鳍的Fish结构称为Finned Fish。

再开看一个Finned/Sashimi X-Wing的例子:

 
图12 Finned/Sashimi X-Wing

​图12中C3和C6为base集,R3和R7为cover集,C3列R89中的两个3为fin(大家需要注意,虽然本例的X-Wing中,若去掉R89C3的两个3之后,C3列可以直接出数,但它仍是个标准的X-Wing结构,因为它严格符合X-Wing的定义:数字A在某两行、列中只能存在于相同的两列、行。我们把类似这种base集中某个位置已有确定的其他数字填入——即原有的Fish少了一部分的结构称为Sashimi Fish)。可删去fin与cover集共同作用格亦即本例中R7C1格内的3。

下图是一个Finned Swordfish的例子,base集=C159{7},cover集=R357{7},R1C9的7为fin,可删去fin与cover集共同作用格R3C7内的7。

 
图13 Finned Swordfish

​下图是一个Finned/Sashimi Swordfish结构(注意本例的情况与图12相似),base集=R269{2},cover集=C258{2},R6C4的2为fin,可删去fin与cover集共同作用格R45C5内的2(红色)。

 
图14 Finned/Sashimi Swordfish

最后在文末提供一个Finned/Sashimi Jellyfish的盘势供大家揣摩。

 
图15 Finned/Sashimi Jellyfish01

作者:零时四分_719b
链接:https://www.jianshu.com/p/ccf42a052af4
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

最新文章

  1. thinkPHP 5.0.x 使用SQLite3 进行缓存设置 Cache
  2. angularjs 的笔记
  3. Java提高配(三七)-----Java集合细节(三):subList的缺陷
  4. 读《程序员的SQL金典》[3]--表连接、子查询
  5. HTML5新特性及详解
  6. POJ Girls and Boys (最大独立点集)
  7. caffe matlab 借口怎么提取灰度图的 feature ? What happened if I mixed the color images with gray images together for training ?
  8. NGUI系列教程六(技能冷却的CD效果)
  9. .net别样外观控件包DotNetBar
  10. hdu 1255 覆盖的面积
  11. javascript动态创建对象
  12. SQL Server索引进阶第十一篇:索引碎片分析与解决
  13. ACdream原创群赛(18)のAK's dream题解
  14. mybatis源码跟踪
  15. nginx里的sticky的作用
  16. C语言程序设计预备作业。
  17. SQL Server 数据库编程技巧
  18. 高级查询query
  19. java与eclipse的工作小结
  20. 【ASP.NET Core】浅说目录浏览

热门文章

  1. Visual Studio 进行Excel相关开发,Microsoft.Office.Interop.Excel.dll库
  2. leetcode859
  3. python查找文件相同的和包含汉字的
  4. MPEG-2码流结构分析
  5. Centos6、7 PHP5.4 5.5 5.6安装
  6. spring 采用编程式事务
  7. JavaScript怎么让字符串和JSON相互转化
  8. java基于feemarker 生成word文档(超级简单)
  9. kubernetes基础环境配置
  10. ubuntu 14.04 Clion2016.2 安装激活与安装后添加快捷启动方式