数独高阶技巧入门之三——Fish
术语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。

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

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

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

本篇开头已经提到,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结构同样如此)。

来看两个Swordfish的实例。

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

图7中,base集=R247{4},cover集=C235{4},可删去cover集红色的4。
Jellyfish——若数字A在某四行(列)中均只能存在于相同的四列(行),则这四列(行)的其他格都不能有A。
Jellyfish进一步将Fish结构扩大到4行4列,我们直接看实例。

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

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

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

我们可以这样推导: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中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。

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

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

作者:零时四分_719b
链接:https://www.jianshu.com/p/ccf42a052af4
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
数独高阶技巧入门之三——Fish的更多相关文章
- 数独高阶技巧入门之六——ALS
在这个系列的第一篇(链及其简单应用)以及第四篇(简单异数链)中已经简单介绍过ALS结构的定义,即n格中存在n+1个不同的候选数 (双值格可视为特殊的ALS结构) .根据数独规则,在组成ALS的候选数 ...
- 数独高阶技巧入门之七——AIC & Nice Loop
AIC(交替推理链,Alternate Inference Chain) 在简单异数链一文中我们介绍过XY-Chain技法,AIC可以看作是XY-Chain的扩展.有别于XY-Chain仅局限于双值格 ...
- 数独高阶技巧之八——SDC
在本系列的第四篇“简单异数链”中,向大家介绍了XY-Wing等一系列Wing类技巧,并提到可以用(拐弯的)数组的观念来理解这些结构,经过第六篇ALS的学习之后,大家回过头再去看Wing,应该可以发现相 ...
- 读《实战 GUI 产品的自动化测试》之:第四步,高阶技巧
转自:http://www.ibm.com/developerworks/cn/rational/r-cn-guiautotesting4/ 定义测试控件库 本系列前几篇文章对 IBM 框架做了介绍, ...
- 高阶 CSS 技巧在复杂动效中的应用
最近我在 CodePen 上看到了这样一个有意思的动画: 整个动画效果是在一个标签内,借助了 SVG PATH 实现.其核心在于对渐变(Gradient)的究极利用. 完整的代码你可以看看这里 -- ...
- 分享录制的正则表达式入门、高阶以及使用 .NET 实现网络爬虫视频教程
我发布的「正则表达式入门以及高阶教程」,欢迎学习. 课程简介 正则表达式是软件开发必须掌握的一门语言,掌握后才能很好地理解到它的威力: 课程采用概念和实验操作 4/6 分隔,帮助大家理解概念后再使用大 ...
- 《前端之路》之 JavaScript 进阶技巧之高阶函数(下)
目录 第二章 - 03: 前端 进阶技巧之高阶函数 一.防篡改对象 1-1:Configurable 和 Writable 1-2:Enumerable 1-3:get .set 2-1:不可扩展对象 ...
- Python入门篇-高阶函数
Python入门篇-高阶函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.高级函数 1>.First Class Object 函数在Python中是一等公民 函数也 ...
- kotlin高阶函数实战&DSL入门
传统函数演示: 这里以电视节目“非诚勿扰”为例,男人去从一大堆美女当中挑选出自己中意的对象,比如台上有24位妹子,其档案如下: 接下来第一个男嘉宾出场啦,如下: 下面用代码来实现一下,比较简单: 先定 ...
随机推荐
- myBaits缓存
转自:https://blog.csdn.net/zhongzh86/article/details/50019511 9. Mybatis 缓存 正如大多数持久层框架一样,MyBatis 同样提供了 ...
- EF中关系映射问题
一对一,和一对多的简单问题就部说了,直接来多对多这样的问题吧. 首现关系映射为这样的: /// <summary> /// 对应数据库中dbo.Address表 /// </summ ...
- IEnumerator & IEnumerable
[IEnumerator] 用于遍历一个对象,IEnumerator在System.Collections命名空间中. public interface IEnumerator { object Cu ...
- SQL的3个主要组成
SQL语言包含3个部分:数据定义语言(DDL),数据操作语言(DML),数据控制语言(DCL) 数据定义语言(DDL) 数据定义语言用于定义和管理对象,例如数据库.数据表及视图等.典型代表有CREAT ...
- 第五章 大数据平台与技术第11讲 MapReduce编程
在大规模的数据当中,需要分发任务,需要进行分布式的并行编程.Hadoop这样一种开源的大数据分析平台. Map阶段 Reduce阶段:相同的键把它聚集到一起之后,然后通过Reduce方式把相同的键聚集 ...
- spark属性
应用属性 属性名 缺省值 意义 spark.app.name (none) The name of your application. This will appear in the UI and i ...
- SUSE Linux 多路径软件+LVM+裸设备的配置
1.先要查出光纤卡的WWN号,SUSE 10下光纤卡的WWD在/sys/class/fc_host/host5/port_name文件中,有两块卡就会有两个host*的目录 接好光纤后可以在dev下可 ...
- Openssl verify命令
一.简介 verify命令对证书的有效性进行验证,verify 指令会沿着证书链一直向上验证,直到一个自签名的CA 二.语法 openssl verify [-CApath directory] [- ...
- win7 + eclipse + cocos2dx 开发环境配置
最近想在win7上配置eclipse+cocos2dx开发环境,在安装之前一定要注意每项是32位还是64位,我选择的都是64位版本的,闲话少叙我们开始安装吧! 1.下载cocos2dx,我选择的是co ...
- [c++] polymorphism without virtual function
polymorphism without virtual function