数独高阶技巧入门之三——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位妹子,其档案如下: 接下来第一个男嘉宾出场啦,如下: 下面用代码来实现一下,比较简单: 先定 ...
随机推荐
- winform频繁刷新导致界面闪烁解决方法
转自龙心文 原文 winform频繁刷新导致界面闪烁解决方法 一.通过对窗体和控件使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于大多数应用程序,.NET Framework 提供 ...
- 「小程序JAVA实战」java-sesion的状态会话与无状态会话(38)
转自:https://idig8.com/2018/09/02/xiaochengxujavashizhanjava-sesiondezhuangtaihuihuayuwuzhuangtaihuihu ...
- 更改AD域安全策略-密码必须符合复杂性要求
在域环境中,修改域用户密码时,会提示不符合密码策略, 更改"本地安全策略"是不会对域产生任何的作用的. 上图中可以看,这里按钮都是灰色的! 下面这个步骤教你如何找到"域安 ...
- RocketMQ初探(二)之RocketMQ3.26版本搭建(含简单Demo测试案例)
作为一名程序猿,要敢于直面各种现实,脾气要好,心态要棒,纵使Bug虐我千百遍,我待它如初恋,方法也有千万种,一条路不行,换条路走走,方向对了,只要前行,总会上了罗马的道. Apache4.x最新版本既 ...
- mybatis与springdata的一些简单比较与思考
主题 最近在用mybatis做项目,有一些感触想记录下,主要是mybatis(以及它的一些插件)相比较于Spring data(或者jpa,hibernate等)的优势地方. 感触 我觉得mybati ...
- 【转】c++虚函数实现原理
原文链接:https://blog.csdn.net/neiloid/article/details/6934135 C++中的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指 ...
- win 10+ iis 10 部署.net core 1.1 web api
今天上午部署了wcf,部署了好久,一直没有部署好,最后找到了dudu的部署方法,结果中午吃饭的时候成功了,这是链接:http://www.cnblogs.com/dudu/p/3328066.html ...
- Fatal error: Class 'MongoDB\Driver\Manager' not found
折腾了好久,总算找到了问题所在! 首先!!检查你安装的PHP拓展版本是否正确,能在在phpinfo()中看到拓展,若看不到,则安装错误! 其次,我在安装PHP扩展的时候,安装的是mongo拓展,如下图 ...
- json和jsonp的区别(转)
原文链接:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 前言: 说到AJAX就会不可避免的面临 ...
- 开发微信小程序入门教程,含破解工具
2016年09月21日晚 微信发不了微信“小程序”的内测版,一时间整个互联网都炸了锅.个大新闻.论坛都在讨论这个事情. 作为互联网的一猿,我们怎能不紧跟时代的脚步.于是第二天上午也对微信发布的“小程序 ...