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

2023-10-08 20:59

本文主要是介绍数独·唯一性技巧(Uniqueness)-1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

唯一矩形(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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://www.cnblogs.com/asdyzh/p/10117210.html

这篇关于数独·唯一性技巧(Uniqueness)-1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/167943

相关文章

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

电脑报错cxcore100.dll丢失怎么办? 多种免费修复缺失的cxcore100.dll文件的技巧

《电脑报错cxcore100.dll丢失怎么办?多种免费修复缺失的cxcore100.dll文件的技巧》你是否也遇到过“由于找不到cxcore100.dll,无法继续执行代码,重新安装程序可能会解... 当电脑报错“cxcore100.dll未找到”时,这通常意味着系统无法找到或加载这编程个必要的动态链接库

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

Apache伪静态(Rewrite).htaccess文件详解与配置技巧

《Apache伪静态(Rewrite).htaccess文件详解与配置技巧》Apache伪静态(Rewrite).htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令,主要的... 一、.htAccess的基本作用.htaccess是一个纯文本文件,它里面存放着Apache服务器

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...