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

唯一矩形(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. ZedGraph类库之基本教程篇

      第一部分:基本教程篇                 ZedGraphDemo中一共有9个基本教程的例子.其中大部分都类似,我会讲解其中一些比较典型的例子.把ZedGraph类库的使用逐步展现给大 ...

  2. 6.solr学习速成之multicore查询

    查询关联多个core 再新建一个core 向每个core添加索引,修改 final static String SOLR_URL = "http://localhost:8080/solr/ ...

  3. temp3

  4. Pandas统计计算和描述

    Pandas统计计算和描述 示例代码: import numpy as np import pandas as pd df_obj = pd.DataFrame(np.random.randn(5,4 ...

  5. 关于性能测试中LR的pacing time设置的相关实验

    最近项目中遇到相关性能测试不同方法产生的争议,我这就这个问题在测试环境做了个实验,得出一些指标数据间的有趣关系,供大家讨论学习: 预备知识点: 业界有个TPS ,ART和实际并发量三者间的模拟换算公式 ...

  6. Tornado 高并发源码分析之二---Tornado启动和请求处理流程

    Tornado 服务器启动流程 因为Tornado 里使用了很多传类的方式,也就是delegate,之所以要这么做,其实和 iOS 开发那样,也很多的 delegate, 如此来实现高度解耦,但是比较 ...

  7. ffmpeg-URL(转)

    ffmpeg中为方便对资源进行访问,定义了两个结构体,URLContext中是对具体资源文件进行操作的上下文,URLProtocol则是在将资源进行分类的基础上,对某一类资源操作的函数集,熟悉Linu ...

  8. Spring Cloud Zuul 2(基于配置中心的动态API网关)

    在大体了解了API Zuul 和 配置中心Config后我们来尝试完成一个基于配置中心的动态API网关 创建项目 命名为api-gateway-dynamic-route并加入config 和 Zuu ...

  9. 迷你MVVM框架 avalonjs 0.99发布

    在本版本主要是性能优化,添加一些有用的功能(如回调什么的),离成品阶段不远了. 修正 updateViewModel bug 修正监控数组的set方法 bug 添加data-each-rendered ...

  10. Solr4.3---4.6删除数据的办法

    Solr4.6的管理界面上,如果不配置数据导入的功能,将看不到清除数据的按钮.我表示很遗憾,正好我们线上没有配置数据导入的功能. 网上搜到的各种清理solr数据的HTTP请求,拿到我的solr4.6上 ...