Hidden Rectangle(隐藏矩形)

在由候选数(AB)组成、可能形成UR结构的4格中,有2~3格存在额外的候选数,此时若以不存在额外候选数的一格为起点,检查其对角格所在的行和列,若该行和列其余位置均不存在候选数A,则应删去对角格中的候选数B。我们将这类结构称为HR。

 
图14 HR-1

图14中,R7C57和R9C57四格可能形成UR结构,其中有三格存在额外的候选数,R7C7不存在额外候选数,其对角格R9C5所在的R9和C5其余位置均不存在候选数5,显然R9C5的5和R7C5、R9C7中的两个5构成矛盾关系,此时,

1、若R9C5中的5成立,则该格中的9不成立;

2、若R9C5中的5不成立,则R7C5、R9C7中的两个5成立,那么R7C7中就只能填入9,R9C5中就只剩9和额外的候选数7可供选择。如果选择填入9,就会如图15在这4格形成一个互换结构(很明显,把5和9位置互换,题目可以得到另一个合乎规则的解),导致题目出现双解。综上,不管R9C5中的5是否成立,该格中的9都应被删去。

 
图15 HR-2

下图是对角两个格存在不同额外候选数的情况,这种情形应先检查是否满足UR6,若不满足UR6,可以分别检查不存在额外候选数的两格,看是否满足HR,本例中R2和C9其他格不存在候选数4,满足HR,可删去R2C9中的5。

 
图16 HR-3

Avoidable Rectangle(可避免矩形)

在HR部分提到了互换结构的概念,这种结构使得我们可以将UR的用法进一步扩充,即在可能形成UR的四格中存在已填入的确定数字,若此时未定格中选择某候选数会导致盘面出现互换结构,就应删除该候选数,这类方法称为Avoidable Rectangle。需要注意的是,只有在可能会形成UR的四格中不存在原题给定数字时,方可使用AR,如果大家是在app上做题,原题给定数字和自己填入的数字无法分辨时,就不要使用这类技巧。

Avoidable Rectangle Type 1

AR1类似于UR1,来看一个例子:图17中,绿框4格已有3格填入确定数字,此时若R2C9中填入9,就会出现互换结构,所以R2C9≠9。

 
图17 AR1-1

图18同样的道理,大家自己体会下。

 
图18 AR1-2

Avoidable Rectangle Type 2

AR1是一格存在额外候选数的情况,AR2则是同侧两格有相同的单个候选数,类似于UR2。

 
图19 AR2-1

上图中,若R78C3两格中的9都不成立,就会形成互换结构,亦即这两格中的9不能同假,必须要成立一个,故可删除这两格所在单元其他位置的9。下图同理。

 
图20 AR2-2

Binary Universal Grave + 1(全双值坟墓+1,BUG+1)

如果某个数独中盘已无摈除解所有未解格均为双值格且每个候选数在每个单元(行、列、宫)均出现且只出现两次,这样的情形会导致题目多解或者无解,我们将这种结构称为全双值坟墓(BUG)。而在BUG基础上,某一格的候选数多出来一个,即存在三个候选数时,可将其称为BUG+1,很明显,若删除多出来的那个候选数,将会导致盘势出现BUG结构,故应把非双值格中在其行列宫仅出现两次的数字删除(或可表述为,非双值格中应填入在所在单元出现三次的那个候选数)。

 
图21 BUG+1-1

图21中,除R1C8外所有未解格均为双值格,除该格中的6在所在单元出现3此外,其余候选数均出现且只出现2次,满足BUG+1的定义,故R1C8格应填入候选数6。

留个题目给大家,图22的盘势是否可以采用BUG+1的技巧,为什么?

 
图22 BUG+1-2

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

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

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

    唯一性技巧基于这样一个事实——各类出版物上发布的数独题目都只有唯一解.事实上,绝大多数数独玩家有这样的共识:即合格的数独题目解应该是唯一的.因此,为了保证题目合格.有效,出题者在制作题目时,会将一些虽 ...

  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. MySQL批量添加表字段

    ALTER TABLE custom ADD contacts2 VARCHAR(50) NOT NULL DEFAULT '' COMMENT '客户联系人2',ADD phone2 VARCHAR ...

  2. linux 系统的后台运行

    后台运行:nohup 程序名 & 杀死后台 ps -ef|grep 名称 kill -9 id(查出的程序id)

  3. 服务器意外重启导致storm报错的问题处理

    解决方法 cat /opt/storm-0.8.2/conf/storm.yaml中找到storm.local.dir设定的目录,备份supervisor和workers两个文件夹,#nohup su ...

  4. Python的索引迭代

    Python中,迭代永远是取出元素本身,而非元素的索引. 对于有序集合,元素确实是有索引的.有的时候,我们确实想在 for 循环中拿到索引,怎么办? 方法是使用 enumerate() 函数: > ...

  5. python's descriptor

    [python's descriptor] 1.实现了以下三个方法任意一个的,且作为成员变量存在的对象,就是descriptor. 1)object.__get__(self, instance, o ...

  6. JAVA 中的IO流

    Java中的IO流是用来处理设备与设备之前的数据传输,在java中以流的形式传输.流分为两类:字节流和字符流. 字节流:InputStream,OutPutSteam.(计算机内的数据都是以字节存储的 ...

  7. zabbix结合grafana

    一.下载grafana 下载地址: http://docs.grafana.org/installation/rpm/ https://s3-us-west-2.amazonaws.com/grafa ...

  8. 28-Truck History(poj1789最小生成树)

    http://poj.org/problem?id=1789 Truck History Time Limit: 2000MS   Memory Limit: 65536K Total Submiss ...

  9. 访问tomcat出现java.lang.IllegalStateException No output folder错误解决方法

    访问tomcat出现java.lang.IllegalStateException: No output folder错误解决方法 问题:tomcat分为安装版和解压缩版,解压缩版如果解压到安装盘,在 ...

  10. Python 日期和时间戳的转换

    Python 日期和时间戳的转换 1. Python中处理时间的模块 Python中处理时间的模块有time.datetime和calendar. 在Python中表示时间的方式: 时间戳:10位整数 ...