唯一性技巧基于这样一个事实——各类出版物上发布的数独题目都只有唯一解。事实上,绝大多数数独玩家有这样的共识:即合格的数独题目解应该是唯一的。因此,为了保证题目合格、有效,出题者在制作题目时,会将一些虽然不违反数独规则,但会导致题目出现双解或多解的特殊结构加以处理。而唯一性技巧可以视为针对这种“处理”的逆向工程,由于这类技巧并非由数独规则导出,在解题过程中可否适用一直存在着大量的争议。尽管如此,由于唯一性技巧易于发现,许多时候可以让你在复杂的局面中直捣黄龙,一举突破卡点,还是建议大家能够充分掌握这类技巧。但要提醒大家,在使用唯一性技巧时一定要注意盘面是否满足技巧的成立条件。

唯一矩形(Unique Rectangle)

我们将类似图1这样存在于两宫(一定要牢记,必须是两宫,4宫不属于唯一矩形,不能使用这类技巧),由4个相同的双值格组成的2行X2列的矩形称为唯一矩形。显然,6、8互换后会形成两个符合数独规则的终盘,题目存在双解,这样的题目是不合格的,出题者一定会避免出现这样的局面。

 
图1 UR

Unique Rectangle Type 1

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

 
图2 UR1-1

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

 
图3 UR1-2

图3是另一个UR1的例子,为了避免出现UR,R9C6必须填入1。

Unique Rectangle Type 2

如果在可能形成UR的四格中,同侧的两格都多出来一个相同的候选数X,如图4,该怎么办?

 
图4 UR2-1

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

 
图5 UR2-2

为了避免出现UR,R8C56中的7必须要成立一个,可删去R8C56所在的R8和B8其他位置的7。

Unique Rectangle Type 3

UR2中,同侧两格多出来的候选数是相同的,当多出来的候选数不同时又该如何?

 
图6 UR3-1

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

 
图7 UR3-2

图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就没有了生存空间,应被删去。

 
图8 UR4-1

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

 
图9 UR4-2

另外,图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。

 
图10 UR5-1

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

 
图11 UR5-2

Unique Rectangle Type 6

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

 
图12 UR6-1

图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-2

图13是另一个UR6的例子,具体删数过程不再赘述。

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

数独·唯一性技巧(Uniqueness)-1的更多相关文章

  1. 数独·唯一性技巧(Uniqueness)-2

    Hidden Rectangle(隐藏矩形) 在由候选数(AB)组成.可能形成UR结构的4格中,有2-3格存在额外的候选数,此时若以不存在额外候选数的一格为起点,检查其对角格所在的行和列,若该行和列其 ...

  2. 数独高阶技巧入门之三——Fish

    术语Fish代表了一组工作原理相同的关于特定候选数的解题技巧(Fish技巧直接产生自数独规则——每个单元内的数字都不能重复),Fish家族成员包括“体型”从小到大的X-Wing.Swordfish. ...

  3. leetcode 36 有效的数独 哈希表 unordered_set unordersd_map 保存状态 leetcode 37 解数独

    leetcode 36 感觉就是遍历. 保存好状态,就是各行各列还有各分区divide的情况 用数组做. 空间小时间大 class Solution { public: bool isValidSud ...

  4. Java Bloom filter几种实现比较

    英文原始出处: Bloom filter for Scala, the fastest for JVM 本文介绍的是用Scala实现的Bloom filter. 源代码在github上.依照性能测试结 ...

  5. 《SQL Server 2012 T-SQL基础》读书笔记 - 8.数据修改

    Chapter 8 Data Modification SQL Server 2008开始,支持一个语句中插入多行: INSERT INTO dbo.Orders (orderid, orderdat ...

  6. atitit.html5 拼图游戏的解决之道.

    atitit.html5 拼图游戏的解决之道. 1. 拼图游戏的操作(点击法and 拖动法) 1 1. 支持键盘上.下.左.右键移动: 1 2. 支持点击空白模块中的上下左右箭头移动: 1 3. 支持 ...

  7. Hyperledger Fabric、Corda和以太坊对比

     Hyperledger Fabric . Corda 和以太坊的对比 三种不同的框架 我们从 Hyperledger Fabric.R3 Corda和以太坊的白皮书中可以看到,三种框架在可能的应用领 ...

  8. 以太坊、Hyperledger Fabric和Corda,哪个更好?

    原创: Philipp Sandner 区块链前哨 昨天 编译|盖磊编辑|前哨小兵甲区块链前哨导语: 我们分析了 Hyperledger Fabric,R3 Corda 和以太坊这三种分布式账本技术间 ...

  9. Category Theory: 01 One Structured Family of Structures

    Category Theory: 01 One Structured Family of Structures 这次看来要放弃了.看了大概三分之一.似乎不能够让注意力集中了.先更新吧. 群的定义 \( ...

随机推荐

  1. java图形用户界面练习。j2se

    总结:主要是如何布局.还是存在很大问题 package clientFrame; import java.awt.FlowLayout; import javax.swing.JButton; imp ...

  2. mysql基础之四:int(M)中M的含义

    昨天写sql文件时把以前一直不是很明白的地方弄明白了,就是在设置int型的时候,需要设置int(M),以前知道这个M最大是255,但是到底应该设置多少并没有在意. 查了下官方manual 有这样的语句 ...

  3. 1130 Infix Expression

    题意:给出一个语法树(二叉树),输出相应的中缀表达式. 思路:很显然,通过中序遍历来做.通过观察,发现除了根结点之外的所有非叶结点的两侧都要输出括号,故在中序遍历时判断一下即可. 代码: #inclu ...

  4. PHP面向对象深入研究之【命名空间】与【自动加载类】

    命名空间 避免类名重复,而产生错误. <?php require_once "useful/Outputter.php"; class Outputter { // outp ...

  5. Informatica PowerCenter下载地址

    https://edelivery.oracle.com/EPD/Download/get_form?egroup_aru_number=12854075

  6. Python Twisted系列教程12:改进诗歌下载服务器

    作者:dave@http://krondo.com/a-poetry-transformation-server/  译者:杨晓伟(采用意译) 你可以从这里从头阅读这个系列. 新的服务器实现 这里我们 ...

  7. Linux quota命令参数及用法详解---Linux磁盘配额限制设置和查看命令

    功能说明:显示磁盘已使用的空间与限制. 语 法:quota [-quvV][用户名称...] 或 quota [-gqvV][群组名称...] 补充说明:执行quota指令,可查询磁盘空间的限制,并得 ...

  8. 移植RT2870无线网卡驱动到s3c2416

    公司项目要用到usb无线网卡,芯片是ralink的RT2870.以下是将其驱动移植到s3c2416的步骤. 1.下载驱动源码,雷凌官网的下载地址是: http://www.ralinktech.com ...

  9. sql合并列

    oralce写法: select WM_CONCAT(A.title) as citys from tmpcity A sql server写法: select stuff((select ','+A ...

  10. linux SIGSEGV 信号捕捉,保证发生段错误后程序不崩溃

    在Linux中编程的时候 有时候 try catch 可能满足不了我们的需求.因为碰到类似数组越界 ,非法内存访问之类的 ,这样的错误无法捕获.下面我们介绍一种使用捕获信号实现的异常 用来保证诸如段错 ...