数独·唯一性技巧(Uniqueness)-1
唯一性技巧基于这样一个事实——各类出版物上发布的数独题目都只有唯一解。事实上,绝大多数数独玩家有这样的共识:即合格的数独题目解应该是唯一的。因此,为了保证题目合格、有效,出题者在制作题目时,会将一些虽然不违反数独规则,但会导致题目出现双解或多解的特殊结构加以处理。而唯一性技巧可以视为针对这种“处理”的逆向工程,由于这类技巧并非由数独规则导出,在解题过程中可否适用一直存在着大量的争议。尽管如此,由于唯一性技巧易于发现,许多时候可以让你在复杂的局面中直捣黄龙,一举突破卡点,还是建议大家能够充分掌握这类技巧。但要提醒大家,在使用唯一性技巧时一定要注意盘面是否满足技巧的成立条件。
唯一矩形(Unique Rectangle)
我们将类似图1这样存在于两宫(一定要牢记,必须是两宫,4宫不属于唯一矩形,不能使用这类技巧),由4个相同的双值格组成的2行X2列的矩形称为唯一矩形。显然,6、8互换后会形成两个符合数独规则的终盘,题目存在双解,这样的题目是不合格的,出题者一定会避免出现这样的局面。

Unique Rectangle Type 1
图2中,若把r2c2的3拿去,即假设R2C2≠3,会发生什么?

没错,若R2C2≠3,就会形成一个由候选数8、9组成的唯一矩形,导致题目双解,与题目解应该唯一矛盾,故可得R2C2=3。我们把这种可能形成UR的4格中的1格多出来额外候选数X的结构称为UR1,基于解的唯一,多出来的额外候选数X应该被填入所在格内(也可表述为,可删去该格中X之外的数字)。

图3是另一个UR1的例子,为了避免出现UR,R9C6必须填入1。
Unique Rectangle Type 2
如果在可能形成UR的四格中,同侧的两格都多出来一个相同的候选数X,如图4,该怎么办?

大家可以先思考一下,本例在什么样的情况下会出现UR。显然,如果R78C9中的两个8都不成立,即R78C9≠8,会出现UR结构。为了避免这种情况发生,R78C9中的8必须要成立一个,不能同假,不管哪个8成立,都可删去两个8所在单元其他格中的8(本例是R9C9中的8)。我们将此类结构称为UR2,再来看一个UR2的例子。

为了避免出现UR,R8C56中的7必须要成立一个,可删去R8C56所在的R8和B8其他位置的7。
Unique Rectangle Type 3
UR2中,同侧两格多出来的候选数是相同的,当多出来的候选数不同时又该如何?

如图6,R46C8中分别多出了(46)和(69)两组数字,经过前面的学习,大家应该可以很快得出结论:1、这两组数字中的4、6、9,至少会有1个成立;2、如果将R46C8打包起来看作一格,就会和R12C8形成一个(469)的显性三链数对(Triplet),据此可对数对所在单元的其他格进行相应摈除。我们将这种额外候选数可以和所在单元其他格内的数字组成数对的结构称为UR3。

图7也是一个UR3的实例,与图6稍有不同,本例中构成的是(13)的显性数队(Pair),因数对所处的位置不同(B4和R6),删除的范围也不同。
Unique Rectangle Type 4
再来看一个例子,图8盘势中R3C79和R6C79构成了类似UR3的结构,易知为了避免出现UR结构,R3C79中额外的候选数(25)至少需要成立1个,但是R3中不存在(25)双值格和R3C79中的(25)构成数对,无法直接删数,至此似乎无从下手。不要着急,现在把视线从额外的候选数移回可能构成UR结构的候选数6和7。观察盘势可以发现,R3中,候选数6只存在于可能形成成UR结构的两个格中,也就是说R3C79两格中的6互为矛盾关系,必然是1真1假,而前边已经分析过,这两格中的2和5也至少需要成立一个,那么显然,R3C79中的候选数7就没有了生存空间,应被删去。

若候选A、B可能构成UR结构,有额外的候选数出现在同侧(行列)可能形成UR结构的两格中,且候选数A在该侧也仅能出现在这两格中,则应删去这两格中的候选数B。我们将这种结构称为UR4。图9是另一个UR4的例子。

另外,图9中还同时存在UR3结构,额外候选数3、9和B9中R9C7的(39)构成数对,可以删去R7C9中的9。
Unique Rectangle Type 5
UR5是UR2结构的变种,UR2中,多出来的相同的候选数X是出现在同侧两格中,而UR5中,X是出现在对角两格或三格中,如图10,R7C58和R8C58四格可能形成UR结构,同时R7C8和R8C7中存在额外候选数1,显然为了避免形成UR结构,这两个1至少需要成立一个,它们之间是强关系,可删去共同作用格R7C4中的1。

图11也是个UR5的应用,本例中,有三个格存在额外候选数6,可删去这3个6共同作用格R8C7中的6。

Unique Rectangle Type 6
UR5是UR2的变种,UR6则是UR4的变种,我们来看实例。

图12中R4C34和R5C34四格可能形成2、5的UR结构,R4C3和R5C4对角两格中有额外的候选数1和3,候选数5只存在于UR四格中(四格所在的行列其余位置均不曾出现5),形成一个X-Wing的结构。此时,
1、为避免出现UR结构,R4C3和R5C4中的1、3至少要有一个成立;
2、四格中对角的两组5必然是同真同假的关系。
显然,要满足条件1,R4C3和R5C4中的5就只能同假,可删去有额外候选数的这两格中的5。

图13是另一个UR6的例子,具体删数过程不再赘述。
作者:零时四分_719b
链接:https://www.jianshu.com/p/becf0a1622b6
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
数独·唯一性技巧(Uniqueness)-1的更多相关文章
- 数独·唯一性技巧(Uniqueness)-2
Hidden Rectangle(隐藏矩形) 在由候选数(AB)组成.可能形成UR结构的4格中,有2-3格存在额外的候选数,此时若以不存在额外候选数的一格为起点,检查其对角格所在的行和列,若该行和列其 ...
- 数独高阶技巧入门之三——Fish
术语Fish代表了一组工作原理相同的关于特定候选数的解题技巧(Fish技巧直接产生自数独规则——每个单元内的数字都不能重复),Fish家族成员包括“体型”从小到大的X-Wing.Swordfish. ...
- leetcode 36 有效的数独 哈希表 unordered_set unordersd_map 保存状态 leetcode 37 解数独
leetcode 36 感觉就是遍历. 保存好状态,就是各行各列还有各分区divide的情况 用数组做. 空间小时间大 class Solution { public: bool isValidSud ...
- Java Bloom filter几种实现比较
英文原始出处: Bloom filter for Scala, the fastest for JVM 本文介绍的是用Scala实现的Bloom filter. 源代码在github上.依照性能测试结 ...
- 《SQL Server 2012 T-SQL基础》读书笔记 - 8.数据修改
Chapter 8 Data Modification SQL Server 2008开始,支持一个语句中插入多行: INSERT INTO dbo.Orders (orderid, orderdat ...
- atitit.html5 拼图游戏的解决之道.
atitit.html5 拼图游戏的解决之道. 1. 拼图游戏的操作(点击法and 拖动法) 1 1. 支持键盘上.下.左.右键移动: 1 2. 支持点击空白模块中的上下左右箭头移动: 1 3. 支持 ...
- Hyperledger Fabric、Corda和以太坊对比
Hyperledger Fabric . Corda 和以太坊的对比 三种不同的框架 我们从 Hyperledger Fabric.R3 Corda和以太坊的白皮书中可以看到,三种框架在可能的应用领 ...
- 以太坊、Hyperledger Fabric和Corda,哪个更好?
原创: Philipp Sandner 区块链前哨 昨天 编译|盖磊编辑|前哨小兵甲区块链前哨导语: 我们分析了 Hyperledger Fabric,R3 Corda 和以太坊这三种分布式账本技术间 ...
- Category Theory: 01 One Structured Family of Structures
Category Theory: 01 One Structured Family of Structures 这次看来要放弃了.看了大概三分之一.似乎不能够让注意力集中了.先更新吧. 群的定义 \( ...
随机推荐
- mysql复制原理与机制一
复制原理:复制需要二进制日志记录数据库上的改变 slave的IO线程复制把master上的Binary log读取到本地的relay log里SQL线程负责把relay log恢复到数据库数据里 sh ...
- linux下用户和组相关的文件及相关管理命令
1.用户信息文件 /etc/passwd 示例root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2: ...
- 使用Spring和Tomcat发布CXF REST WebService
与发布SOAP WS一样, 同样需要在web.xml文件中配置CXFServlet: <!--cxf的Servlet--> <servlet> <servlet-name ...
- java 代码,练习ip,主机名的获取方法。InetAddress类
package clientFrame; import java.io.IOException; import java.net.*; public class tai { public static ...
- phpmailer绑定邮箱
1.配置 <?php return array ( 'email_host' => 'smtp.aliyun.com', 'email_port' => '25', 'email_u ...
- C#使用自定义字体
/// <summary> /// 设置字体 /// </summary> /// <param name="path">字体文件路径,包含字体 ...
- Linux学习笔记 -- 话说文件
文件基本属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定. 在Li ...
- MyBatis 工具 pndao - 自动写 SQL
pndao的原理并不复杂,是基于MyBatis的方法命名约定来生成SQL,并且写入MyBatis需要的XML. 写之前会判断是否已经存在XML或者注解,如果已经存在则略过此方法,所以无论是注解还是XM ...
- Spring AOP 中pointcut expression表达式解析及配置
Pointcut是指那些方法需要被执行”AOP”,是由”Pointcut Expression”来描述的. Pointcut可以有下列方式来定义或者通过&& || 和!的方式进行组合. ...
- 通过helloworld来认识下backbone
Backbone主要涉及3部分:model,collection和view.而这个框架的优势在于:数据与视图分离,通过操作model来自动更新view. 根据我的个人经验,直接写个简单的例子是最最直观 ...