加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

数独的候选数法解题技巧(下)

(2009-07-03 20:41:00)
标签:

杂谈

分类: MSN搬家
  接上篇,越来越高深的技巧了,对于复杂题目有必要了解这些。
 
  隐性三链数删减法(Hidden Triples)
  矩形顶点删减法(X-Wing)
  三链列删减法(Swordfish)
  关键数删减法
 

数独的候选数法解题技巧──隐性三链数删减法
(Hidden Triples)
 
概说
 
遇到了高级、困难级的数独谜题,使得唯一候选数法和 隐性唯一候选数法黔驴技穷的时候,就是各种删减法上场的时机了。在各种的删减法中,哪一个要先用 是随个人之喜好的,并无限制。本页介绍的例子当然可用其它删减法完成解题,但还是要以隐性三链数删减法优先啰!
 
8-1
<图 1>
 
请看<图 1>的第 2 列,数字 1、7、8 只出现在(2, 1)、(2, 7)和(2, 8)这三个宫格的候选数中;这时 隐性三链数删减法的条件已成立了!这表示第 2 列的数字 1、7 和 8 将只能填到这三个宫格中,因为: 如果让别的数字填入这三个宫格之中后,这三个相异的数字能填入的可能宫格就只剩下两个,而那是 不可能的事!所以若这三个宫格的候选数中还有其它数字,全部是多余无用的,它们已不可能再用来 填入这些宫格中了,所以可以毫不考虑的把它们删减掉。于是(2, 7)和(2, 8)这两个宫格候选数中的 6 都可被安全的删减掉;其中(2, 7)的候选数少了数字 6,将使得(8, 7)出现行隐性唯一候选数 6 ,于是 可用隐性唯一候选数法来填入下一个解了。
 
整理一下:
 
1. 当某 3 个数字仅出现在某列的某三个宫格候选数中时,就可以把这三个宫格的候选数删减成该 3 个数字。
2. 同理,当某 3 个数字仅出现在某行的某三个宫格候选数中时,就可以把这三个宫格的候选数删减成该 3 个数字。
3. 当然,当某 3 个数字仅出现在某个九宫格的某三个宫格候选数中时,就可以把这三个宫格的候选数删减成该 3 个数字。
 
利用「找出某 3 个数字仅出现在某行、某列或某一个九宫格的某三个宫格候选数中的情形,进而将这三个 宫格的候选数删减成该 3 个数字」的方法就叫做隐性三链数删减法(Hidden Triples)。
 
本法其实为隐性数对删除法的推广,而且还可以继续加以推广:
 
1. 隐性四链数删减法就是:「找出某 4 个数字仅出现在某行、某列或某一个九宫格的某四个宫格候选数中 的情形,进而将这四个宫格的候选数删减成该 4 个数字」的方法。
2. 隐性五链数删减法就是:「找出某 5 个数字仅出现在某行、某列或某一个九宫格的某五个宫格候选数中 的情形,进而将这五个宫格的候选数删减成该 5 个数字」的方法。
3. ......
 
如果愿意的话,你确实是可以这样推广的,只是,实用上是否有其应用的价值或空间呢?
 
隐性三链数删减法示例
 
隐性三链数删减法一共有 3 种状况:第一种发生在行、第二种是发生在列、第三种则发生在九宫格。<图 1> 就是 发生在列的例子了,其它的情况举例如下:
 
8-2
<图 2>
 
<图 2> 是隐性三链数删减发生在行的例子:图中第 4 行的数字 2、4、9 只出现在 (4, 4)、(5, 4)及(6, 4) 这三个宫格的候选数中,所以可以将三个宫格候选数中 2、4、9 以外的数字安全的删减掉,(4, 4)的候选数删减成2、4; (5, 4)的候选数删减成2、4、9;(6, 4)的候选数删减成 9;出现了唯一候选数啦!
 
8-3
<图 3>
 
<图 3> 是隐性三链数删减发生在九宫格的例子:图中中央九宫格的数字 2、5、9 只出现在 (5, 4)、(5, 6)及(6, 4) 这三个宫格的候选数中,所以可以将三个宫格候选数中 2、5、9 以外的数字安全的删减掉, (5, 4)的候选数删减成2、5、9;(5, 6)的候选数删减成2、5;(6, 4)的候选数删减成 9;出现了唯一候选数啦!
 
8-4
<图 4>
 
像 <图 1>~<图 3> 这样只经一次删减就出现下一个解的情况当然不错了,但有时可没法这样顺心, <图 4> 就是一个例子。下一个解将出现在(5, 6) 这个宫格,你能找出该填入什么数字吗?
 
以目前所学到的方法,要解出下一个解,需要二个步骤:
 
1. 先看中左九宫格吧!由于只剩(5, 1)~(5, 3)这个区块尚未填入数字,所以可用区块删减法将 第 5 列其它区块候选数中的 1、3、4 全部删减掉,但实际上仅能删到(5, 4)及(5, 6)候选数的数字 4 而已。
 
2. 接下来请观察第 6 行! 由于数字 1、4、9 只出现在 (2, 6)、(8, 6)及(9, 6) 这三个宫格的候选数中 [因为(5, 6)的候选数在上一步骤中已被删减为5、8 了 ], 所以可用隐性三链数删减将三个宫格候选数中 1、4、9 以外的数字安全的删减掉, (2, 6)的候选数删减成1、4、9;(9, 6)的候选数没变;(8, 6)的候选数则由 2、4、5、8、9 删减成 4、9; 由于 5 被删减掉了,使得(5, 6) 出现了行隐性唯一候选数 5 啦!
 
fk:和隐形数对一样,隐形三链数也是最好在填写候选的时候进行处理,等到最后才去处理的话,并不容易找出来。当然这也要考验你本人的眼力了!!

数独的候选数法解题技巧──矩形顶点删减法
(X-Wing)
 
概说
 
遇到了高级、困难级的数独谜题,使得唯一候选数法和 隐性唯一候选数法黔驴技穷的时候,就是各种删减法上场的时机了。在各种的删减法中,哪一个要先用 是随个人之喜好的,并无限制。本页介绍的例子当然可用其它删减法完成解题,且本删减法成立的条件 和其它方法相比稍嫌繁杂,但为了介绍,在进行解题时还是要以矩形顶点删减法优先啰!
 
9-1
<图 1>
 
请看<图 1>的第 1 列及第 9 列,数字 8 都只出现在第 5、8 行的宫格候选数中;这时,数字 8 在此二列的 填入只有下列两种情形:
 
1. 第 1 列的数字 8 若填到 (1, 5) 中、则第 9 列的数字 8 就只能填到 (9, 8) 了。
2. 第 1 列的数字 8 若填到 (1, 8) 中、则第 9 列的数字 8 就只能填到 (9, 5) 了。
 
不论哪一种情况发生,都表示第 5 行及第 8 行的数字 8 已有归属了,所以 ( 2, 5 )~( 8, 5 ) 及 ( 2, 8)~( 8, 8 ) 都不能再填入数字 8 了,可以毫不考虑的自它们的候选数中把数字 8 删减掉, 于是(3, 5)、(6, 5)和(3, 8)、(7, 8)这四个宫格候选数中的 8 都可被安全的删减掉;而当(6, 5)的候选数少了数字 8 后,将使得(6, 6)出现列隐性唯一候选数 8 ,于是 可用隐性唯一候选数法来填入下一个解了。
 
整理一下:
 
1. 当某个数字在某两列仅出现在相同的两行时,就可以把这两行其它宫格候选数中的该数字删减掉。
2. 同理,当某个数字在某两行仅出现在相同的两列时,就可以把这两列其它宫格候选数中的该数字删减掉。
 
利用「找出某个数字在某两列仅出现在相同两行的情形,进而将该数字自这两行其它宫格候选数中删减掉」; 或「找出某个数字在某两行仅出现在相同两列的情形,进而将该数字自这两列其它宫格候选数中删减掉」的方法 就叫做矩形顶点删减法(X-Wing)。因为本删减法的条件成立时,关键的数字 8 所处的宫格在数独方阵上看来,刚好就在一个矩形的顶点。
 
遇到了高级、困难级的数独谜题,使得唯一候选数法和 隐性唯一候选数法黔驴技穷的时候,虽然你可以优先使用矩形顶点删减法来寻找下一个解;但大部分的人在 使用删减法的优先级上,通常都会将矩形顶点删减法排在稍后一点,为什么要如此安排,在实际使用一段时间之后, 相信你自能体会了,但这个方法又是不可或缺的,如果不会运用本删减法,有很多高级的数独谜题就将无解了。
 
矩形顶点删减法示例
 
矩形顶点删减法只有 2 种状况:第一种的删减发生在行、第二种的删减发生在列。<图 1> 就是 删减发生在行的例子了,第二种的情况举例如下:
 
9-2
<图 2>
 
<图 2> 是矩形顶点删减发生在列的例子:图中第 2 行、第 8 行的数字 3 只出现在第 1 列及第 2 列, 所以数字 3 在第 2 行及第 8 行的填入只有下列两种情况:
 
1. 第 2 行的数字 3 若填到 (1, 2) 中、则第 8 行的数字 3 就只能填到 (2, 8) 了。
2. 第 2 行的数字 3 若填到 (2, 2) 中、则第 8 行的数字 3 就只能填到 (1, 8) 了。
 
不论下列哪一种情况发生,都表示第 1 列及第 2 列的数字 3 已有归属,这两列其它的宫格将不能再 填入数字 3 了,所以可以将数字 3 自(1, 3)、(1, 5)及(2, 1)、(2, 4)、(2, 5)的候选数中安全的 删减掉,而当(2, 4) 的候选数由 2、3、4、6 删减成 2、4、6 时;(3, 4)将出现行隐性唯一候选数 3 啦!
 
9-3
<图 3>
 
<图 3> 也是一个删减法综合运用的例子。在(1, 8)中将可找到下一个解,你能找出来吗?
 
1. 因为上中九宫格的数字 1 只发生在(2, 4)~(2, 6) 这一个区块,所以可以利用区块删减法 把(2, 7)~(2, 9)候选数中的数字 1 安全的删减掉。
2. 因为第 1 行及第 7 行的数字 1 只出现在第 4 列及第 9 列,所以可以利用矩形顶点删减法 把(4, 3)及(9, 6)、(9, 8)、(9, 9)候选数中的数字 1 安全的删减掉。
 
经过以上删减之后,(1, 8)出现行隐性唯一候选数 1 啦!
 
fk:这个方法我以前还真没注意到,不过就如同文章中所写的,这个方法的优先级一般会被排的比较低,光是去理解这个方法,就会发现,在实际应用的时候,这个方法是在太复杂了,比【大家来找茬】还要考验人的眼力!!

三链列删减法
(Swordfish)
 
三链列删减法是矩形顶点删减法的扩展,如果不清除矩形顶点删减法,可以参考矩形顶点删减法,以便于更容易理解本节内容。 利用“找出某个数字在某三列仅出现在相同三行的情形,进而将该数字自这三行其他宫格候选数中删减掉”; 或“找出某个数字在某三行仅出现在相同三列的情形,进而将该数字自这三列其他宫格候选数中删减掉”的方法 就叫做三链列删减法(Swordfish)。
 
10-1
如果数字“1”可能出现在B行、E行、G行的黄色宫格,则符合“某个数字在某三列仅出现在相同三行的情形”,符合三链列删减法的要求。
 
10-2
则红色宫格均不包含候选数“1”。 
 
10-3
这时上图的一个变形。其中一行的“1”只能放在这一行的两个位置。 处理和上图一样,红色宫格均可以排除候选数“1”。 
 
10-4
数字"6"在第2列,第6列,第8列。均出现在A,B,I行。其中在第6列仅出现B,I行,仍然符合三链列删减法的要求。 
 
10-5
则红色宫格均可以排除候选数"6" 
 
fk:这个方法是【矩形顶点删减法】的延续,可以在用【矩形顶点删减法】的时候一并处理。有一个挑战眼力的规则…

关键数删减法
 
在进入到解题后期,利用前面讲到的唯一候选数法、隐性唯一候选数法、 区块删减法、数对删减法、隐性数对删减法、 三链数删减法、隐性三链数删减法、矩形顶点删减法、 三链列删减法都无法有进展的时候,可以考虑使用关键数删减法。关键数删减法就是在后期找到一个数,这个数在行(或列,九宫格)仅出现两次的数字。我们假定这个数在其中一个宫格类,继续求解,如果发生错误,则确定我们的假设错误。如果继续求解仍然出现困难,不妨假设这个数在另外一个宫格,看能不能得到错误。这就是关键数删减法.
 
关键数删减法的本质是让我们一个个去测试,逐渐排除不可能的候选数,从而求解的过程。
 
这种解法就暂时不举例子了
 
fk:我必须承认这是我最讨厌的方法,基本没有几个游戏支持【分歧点】的设计,而如果通过手算来算的话,这种方法无疑更虐。

(全文完)
 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有