为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

数独专题(好)

2017-09-20 50页 doc 2MB 8阅读

用户头像

is_496339

暂无简介

举报
数独专题(好)数独专题 数 数 独 数 独 快 独 介 速 技 绍 入 巧 门 数独(SuDoku)介绍 数独是一种源自18世纪末的瑞士,后在美国发展、并在日本得以发扬光大的数学智力拼图游戏。拼图是九宫格(即3格宽×3格高)的正方形状,每一格又细分为一个九宫格。在每一个小九宫格中,分别填上1至9的数字,让整个大九宫格每一列、每一行的数字都不重复。 数独的玩法逻辑简单,数字排列方式千变万化。不少教育者认为数独是锻炼脑筋的好方法。 历史 如今数独的雏型首先于1970年代由美国的一家数学逻辑游戏杂志发表,当时名为Number Place。现...
数独专题(好)
数独专题 数 数 独 数 独 快 独 介 速 技 绍 入 巧 门 数独(SuDoku)介绍 数独是一种源自18世纪末的瑞士,后在美国发展、并在日本得以发扬光大的数学智力拼图游戏。拼图是九宫格(即3格宽×3格高)的正方形状,每一格又细分为一个九宫格。在每一个小九宫格中,分别填上1至9的数字,让整个大九宫格每一列、每一行的数字都不重复。 数独的玩法逻辑简单,数字排列方式千变万化。不少教育者认为数独是锻炼脑筋的好方法。 历史 如今数独的雏型首先于1970年代由美国的一家数学逻辑游戏杂志发表,当时名为Number Place。现今流行的数独于1984年由日本游戏杂志《パズル通信ニコリ》发表并得了现时的名称。数独本是“独立的数字”的省略,因为每一个方格都填上一个个位数。 数独冲出日本成为英国当下的流行游戏,多得曾任香港高等法院法官的高乐德(Wayne Gould)。2004年,他在日本旅行的时候,发现杂志的这款游戏,便带回伦敦向《泰晤士报》推介并获得接纳。英国《每日邮报》也于三日后开始连载,使数独在英国正式掀起热潮。其他国家和地区受其影响也开始连载数独。 数独术语 要理解如何对一个数独题求解,我们先来介绍一些在本网站中使用的术语。 单元格和值 一个数独谜题通常包含有9x9=81个单元格,每个单元格仅能填写一个值。对一个未完成的数独题,有些单元格中已经填入了值,另外的单元格则为空,等待解题者来完成。 行和列 习惯上,横为行,纵为列,在这里也不例外。行由横向的9个单元格组成,而列由纵向的9个单元格组成。很明显,整个谜题由9行和9列组成。为了避免混淆,这里用大写英文字母和数字分别表示行和列。例如,单元格[G6]指的是行G和第6列交界处的单元格,它已填入了值7。 区块 术语区块指的是起始于特定位置的9个相邻的单元格组。在上图中,区块用交替相间的背景颜色来注明。例如,对于最左上角的区块,我们表示为起始于[A1]的区块。 单元 任何一行,一列或一个区块都是一个单元。每个单元都必须包含全部但不重复的数字1到9。 数独题目难度 很多人认为数独题目的难度取决于已填入谜题中的数字的数量,其实这并不尽然。一般来说,填入的数字越多,题目就越容易求解。然而实际上,有很多填入数字多的题目比填入数字少的题目要难得多。这就需要有其他的方法来确定的难度。 在应用中使用得比较多的一种方法是看看要解决一道数独题目需要用到哪些数独技巧。极简单的题目用到的可能只是最基本的技巧。而相对复杂的题目可能要用到十分高深的解题方法。通过这样来设定游戏的难度相对而言较为客观。 数独的变化 人们总是不满足于已有的一切。同样,对于普遍使用的9x9谜题而言,大量涌现的变形数独题也在不断丰富着数独家族。 一种比较常见的数独变形是大小上的改变。现在已有的大小包括:4x4,6x6,12x12,16x16,25x25,甚至还有100x100。 另一种数独变形题是在原数独规则的基础上加入其他的规则。譬如X形数独就要求除原来的数独规则 外,连主对角线上的单元格也要满足数字1到9的唯一性和完整性。而杀手数独则要求每个“区”(虚线环绕的一组单元格)中的值必须唯一且总和等于区的右上角所指定的数字。 数独快速入门(上篇) 范例一: 在左边第一个九宫格里,哪格可以放数字1, 先看到再第一列和第二列里已经有了数字1, 所以很明显了,除了棕色格子之外,上面两列格子已经不能放1了。 范例二: 换个进阶范例来看看, 已知第一列和第二列不能放1,但仅就第三列而言,2的旁边似乎都可以放1的样子, 但再看看被颜色标示的第三行, 看到第三行有1之后,就知道棕色格子应该放1。 范例三: 来个更进阶点的,想想左上角第一个九宫格里,哪一格可以放1, 再看 先看看前两列,应该不能放1, 看被颜色标示的第二行与第三行,又是不能放1, 很显然的,就只有棕色格子能放1。 范例四: 再看看这个重要范例,想想左上角第一个九宫格里,哪格可以放1, 先看看被颜色标示的第二列, 再看看被颜色标示的第二行, 经过分析后可知1要放在这棕色格子。 范例五: 换个轻松点的范例, 看看第一列,数字有哪些, 显而易见的就是缺1。 数独快速入门(中篇) 范例一: 看看这个比上篇难的,想想1能放在哪里呢, 被颜色标示起来的第一列和第一行已经不能放1了, 就左上角的九宫格而言,在红色标示区域似乎是可以摆1的, 但在这里而言,似乎无法决定1放在两格红色区域的哪一格, 所以,可以先看看邻近的九宫格,发现到棕色格子能放1喔,这时候就不用怀疑马上写下1。 范例二: 看看这个有技术性的,想想1能放在哪里, 看到黄色的第一列已经有1,所以不能再放1了, 就中央的九宫格而言,合理的推论,1一定是在第二列中央红色三格的其中之一了, 既然知道第二列的情况,再考虑黄色区域后, 那么可以先确定右方九宫格的1必然放在这棕色格子。 范例三: 由上篇的概念再进阶,考虑这上面三个九宫格,看能否决定1的位置, 黄色标示的第三行已先被排除, 就第一个九宫格而言,1一定在红色区域, 就黄色标示区域来看,已不能再放1了, 这时可以马上先决定右上九宫格里的棕色格子是能放1的啦。 范例四: 看到这左上方九宫格的第一列,就可以马上知道缺了哪两个数字, 是不是已经看出红色格子不是1就是9了, 但是又看到第二行有1,所以很轻松知道左上棕色格子一定是1, 接下来9就确定在红色格子了。 范例五: 先看看这第一列, 左上方的九宫格里,第一列绝对有1、8、9, 再考虑到第一行黄色区域,看到有8和9, 这下就可确定1绝对放在左上角的棕色格子。 数独快速入门(下篇) 范例一: 来看看这个高级进阶例子,可以先把眼光放在第一列和第一行, 看到在黄色区域里都有2和3,所以此黄色区域已经不能再放2和3了 这时可以考虑到左上九宫格里的红色格子能放2和3, 再看到第一列和第三列的黄色区域,这黄色区域里已经不能放1, 在左上九宫格里,能放1的只有红色与棕色格子,但红色格子将会被2和3所占据,所以能确定棕色格子必然为1。 范例二: 看看左上方九宫格里,能否由些微线索决定1的位置, 首先,看到第一列后先排除5、6、7,又因左上方九宫格里有2、3、4,再排除这三个数字,这下,在左上方九宫格的第一列,只剩下1、8、9可以填,然后,又看到第一行有8和9,所以,棕色格子必然不会是8和9,那么,就只剩下1可以填入啦! 数独的技巧 对于数独游戏的解法,通常采用"直观法(Direct Elimination Techniques)" 和 "候选数法(Candidates Elimination Techniques)". 直观法(Direct Elimination Techniques),顾名思义,就是通过对谜题中现有的数字进行分析,继而逐一确定剩余空格中的数字的方法。它是最常用并且相对简单的方法,对于比较容易的谜题,可以快速求解并收到良好的效果。但是遇到比较复杂的题目,直观法(Direct Elimination Techniques)就稍显力不从心了。 候选数法(Candidates Elimination Techniques), 是先在所有空白的单元格中写上所有可能出现的数字,然后通过一些常用的算法来删减候选数,最终获得唯一确定的候选数。候选数法(Candidates Elimination Techniques)被广泛使用在电脑生成谜题及解题的实践中,这不仅因为它编程相对容易,而且它的算法也在不断增加,使它的解题效率和能力都得以大力提高。 直观法(Direct Elimination Techniques) 经常在报章杂志上看到的数独谜题,一般就算再难都可以用直观法来解决。它不需要象候选数法(Candidates Elimination Techniques)那样在每个空白的单元格中用铅笔填上一大堆候选数。你只要有相对锐利的眼光和一定的逻辑分析能力,就可以准确地把空余的数字逐个填出来。实际上,直观法就是对数独游戏规则的充分利用。虽然它并不如候选数法(Candidates Elimination Techniques)那样强大,但通常要想体会解决数独谜题的乐趣,使用直观法却是不二之选。 直观法(Direct Elimination Techniques)具有以下的特点: 1. 轻松上手。 即便是数独新手,在拿到谜题的一刹那,就可以用直观法来解题了。 2. 无需辅助。 在纸上解题时一般只需要一支钢笔就可以。因为是通过推理和逻辑分析来确定哪个格填哪个数,或是哪个数填在哪个格里,所以基本不需要猜测。 3. 容易掌握。 对于直观法(Direct Elimination Techniques)中应用的各种算法,可以很快掌握并应用于实际中。 4. 相对简单。比起候选数法(Candidates Elimination Techniques),它的算法相对比较简单,当然能解决的谜题的复杂度也相对要低。 在直观法(Direct Elimination Techniques)中,常用的算法包括: 1. 单元唯一法 ( Sole Position Technique ) 2. 单元排除法 ( Basic Elimination Technique ) 3. 区块排除法 ( Block Elimination Technique ) 4. 唯一余数法 ( Sole Number Technique ) 5. 组合排除法 ( Combination Elimination Technique) 6. 矩形排除法 ( Rectangle Elimination Technique) 下面先介绍直观法的几种算法: 单元唯一法 ( Sole Position Technique ) 这应该算是直观法中最简单的方法了。基本上只需要看谜题,推理分析一概都用不上,这是因为要使用它所需满足的条件十分明显。同样,也正是因为它简单,所以只能处理很简单的谜题,或是在处理较复杂谜题的后期才用得上。 我们先来看一个例子: 在上图中,观察行B,可以看到除了[B3]外,其他所有的单元格中都已有了数字,根据数独游戏的规则,即每行,列或区块中不能有重复的数字,则[B3]中能填入的数字只能是行B中所未出现过的,也就是数字3。所以可以毫不犹豫地在[B3]中填入3。 这就是单元唯一法在行中的应用。这里的单元(Unit, or group),指的是行,列或区块。所以有三种情况: 1. 当某行有8个单元格中已有数字,或 2. 当某列有8个单元格中已有数字,或 3. 当某区块有8个单元格中已有数字。 无论是哪种情况,我们都可以很快地在该行,列或区块剩余的空格中填入该单元还未出现过的数字。 下面是单元唯一法在列中的应用: 在第7列中,只有[F7]未填入数字,且这一列中数字8还未出现过。所以[F7] = 8。 在区块中也是一样: 在起始于[D7]的区块中,只有[E7]还未填入数字,且这个区块中数字5还未出现过,所以可以马上在[E7]中填入5。 单元唯一法在解题初期应用的几率并不高,而在解题后期,随着越来越多的单元格填上了数字,使得应用这一方法的条件也逐渐得以满足。 单元排除法 ( Basic Elimination Technique ) 单元排除法是直观法中最常用的方法,也是在平常解决数独谜题时使用最频繁的方法。使用得当的话,甚至可以单独处理中等难度的谜题。 使用单元排除法的目的就是要在某一单元(即行,列或区块)中找到能填入某一数字的唯一位置,换句话说,就是把单元中其他的空白位置都排除掉。它对应于候选数法中的隐式唯一法。 那么要如何排除其余的空格呢?当然还是不能忘了游戏规则,即行,列或区块中不能有重复的数字。从另一个角度来理解,就是 1. 如果某行中已经有了某一数字,则该行中的其他位置不可能再出现这一数字。 2. 如果某列中已经有了某一数字,则该列中的其他位置不可能再出现这一数字。 3. 如果某区块中已经有了某一数字,则该区块中的其他位置不可能再出现这一数字。 单纯理解上面的规则还是不足以解题,但是在实践中这些规则却可以交叉使用。在实际解题过程中,应用最多也最方便的是对区块的单元排除法,我们可以先看下面这个例子: 对于起始于[D1]的区块,其未填数字的空格有6个之多,如果不使用单元排除法,是很难为这一区块填入任何数字的。这时我们就可以利用行,列及区块的相互关系,即一个单元格既在某一行上,也同时在某一列上以及某一区块中的这种关系来解题。 观察数字9在谜题中的位置,可以看到它出现在[B2],[A4],[C7],[D8],[I1]和[H9]。而这些位置中,只有[B2],[D8]和[I1]与起始于[D1]的区块有关联。因为[I1]=9,它所在的第1列上的其他单元格中不可能再出现9, 而区块中的[D1]和[F1]正好也在第1列上,所以这两个单元格填入9的可能性被排除。同理,因为[B2]=9,它所在的第2列中的其他单元格不可能再填入9,而区块中的[D2]和[E2]也正好在第2列上,因此,这两个单元格填入9的可能性也被排除掉了。再看行D,因为[D8]=9,所以该行上的[D1],[D2]和[D3]也不可能再填入9,而这些单元格正好也在起始于[D1]的区块中。所以,这个区块中能填入数字9的位置就只剩下了[E3],这样就通过排除法找到了答案,即[E3]=9。 下面再看一个在行中使用单元排除法的例子: 在谜题中观察数字4和行H,在行H有5个空单元格无法确定数字,但是[C3]位置上的4使得其所在的第3列中的其他单元格上不能再出现4,所以[H3]不能填入4。[I4]上的4使得其所在的区块中也不能再填入4,它帮助行H排除了两个单元格[H4]和[H6],而第8列上的[E8]中的数字4使得同样位于这一列上的[H8]也排除了填入4的可能。这样,行H中能填入4的位置就只剩下[H9]了。 在列中也可以使用单元排除法: 在第7列中,我们试图确定能填入数字1的位置。在行B中,数字1已经出现在[B2]上,所以[B7]不可能再填入数字1了。而位于[D8]的数字1也使得[F7]排除了填入数字1的可能,因为它们位于同一区块中。这样,第7列上就只有[A7]能填入数字1了。 通过上面的示例,可以看到,要对区块使用单元排除法,需要观察与该区块相交的行和列。要对行使用单元排除法,需要观察与该行相交的区块和列。要对列使用单元排除法,需要观察与该列相交的区块和行。 在实际解题过程中,行,列和区块之间的关系并不象上面这些图中所示的那么明显,所以需要一定的眼力和细心观察。一般来说,先看哪个数字在谜题中出现得最多,就从哪个数字开始下手,找到还未填入这个数字的单元(行,列或区块),利用已填入该数字的单元格与单元之间的关系,看能不能排除一些不可能填入该数字的位置,直到剩下唯一的位置。如果害怕搞不清已经处理过哪些数字的话,可以从数字1开始,从左上角的区块开始一直检查到右下角的区块,看能不能在这些区块中应用单元排除法。然后测试数字2,以此类推。 单元排除法是应用得最多的直观法,虽然在实践中经常会因为粗心而漏掉很多使用这一方法的机会,但只要勤加练习,就可以运用自如。 区块排除法 ( Block Elimination Technique ) 区块排除法是直观法中进阶的技法。虽然它的应用范围不如单元排除法那样广泛,但用它可能找到用单元排除法无法找到的解。有时在遇到困难无法继续时,只要用一次区块排除法,接下去解题就会势如破竹了。 区块排除法实际上是利用区块与行或列之间的关系来实现的,这一点与单元排除法颇为相似。然而,它实际上是一种模糊排除法,也就是说,它并不象单元排除法那样利用谜题中现有的确定数字对行,列或区块进行排除,而是在不确定数字的具体位置的情况下进行排除的。这句话听起来似乎不好理解,让我们先从一个例子入手,看看区块排除法是怎么应用的。 对于上面这个谜题,用基本的单元排除法或是单元唯一法都无法再找到解。这时可以尝试使用区块排除法。 我们先从填入数字最多的区块着手,也就是起始于[G4]的区块,该区块中只有[H6]和[I5]为空,且剩余数字1和2还未填入。这样,我们可以想办法确定这两个数字的位置。 观察全局,可以看到[D2]=2,根据单元排除法,它所在的第2列上不能再出现数字2,所以[H2]和[I2]将不能填入2,这使得起始于[G1]的区块中数字2可能出现的位置仅剩下[I1]和[I3],见下图: 虽然我们无法确定2在起始于[G1]的区块中的确定位置,但幸运的是,能填入2的位置正好都在行I上,也就是说,无论2在[I1]还是在[I3],行I的其他单元格中将不可能再出现数字2,所以可以毫不犹豫地排除在[I5]填入2的可能性,这样,对于起始于[G4]的区块而言,能填入数字2的位置就只剩下[H6]了。所以[H6]=2。接下来,当然毫无疑问,利用单元唯一法,在[I5]填入数字1。 先小结一下上面的求解方法:解题时,实际上是在对目标区块(主区块)有影响的区块(辅助区块)中应用单元单元排除法,使辅助区块满足某些条件并能参与对主区块的数字排除。 实际应用中,可能出现下面四种情况: 1. 当某数字在某个区块中可填入的位置正好都在同一行上,因为该区块中必须要有该数字,所以这一行中不在该区块内的单元格上将不能再出现该数字。 2. 当某数字在某个区块中可填入的位置正好都在同一列上,因为该区块中必须要有该数字,所以这一列中不在该区块内的单元格上将不能再出现该数字。 3. 当某数字在某行中可填入的位置正好都在同一区块上,因为该行中必须要有该数字,所以该区块中不在该行内的单元格上将不能再出现该数字。 4. 当某数字在某列中可填入的位置正好都在同一区块上,因为该列中必须要有该数字,所以该区块中不在该列内的单元格上将不能再出现该数字。 其中1,2两种情况相对常见,也比较容易判断。上面的示例就是第1种情况。下面我们会看到第2种情况的例子: 虽然在起始于[A7]的区块中,未填入数字的空单元格多达4个,但我们还是可以轻松地确定数字5的位置。这是因为在起始于[G7]的区块中,我们欣喜地发现数字5可能出现的位置正好都在第8列上,这时5的确切位置已经不重要了,因为它已经满足了上面介绍的第2种情况的条件,因此可以参与对起始于[A7]的区块进行数字排除了。在它的影响下,[A8]和[B8]中填入数字5的可能性已经不存在,因为它们都在第8列上。这样,在起始于[A7]的区块中,数字5能填入的位置只剩下[A9]和[C9]了。这时,我们再利用单元排除法,通过[A4]位置上的数字5再消除其所在行A上的[A9],最终得到能填入5的唯一位置[C9]。 下面看几个比较少见的例子 在行C上,数字3的位置可以通过下面的方法来确定: 先看行B,利用单元排除法,通过[H2]和[F3]位置上的3进行列排除,得到行B中能填入3的位置为[B4]和[B5]。碰巧的是,这两个单元格都在起始于[A4]的区块中,这时已经满足了上述情况3的条件。利用单元排除法的区块排除,则行C上的[C4]和[C5]都不能再填入3;再加上[F3]的列排除的共同努力,最终确定数字3在行C上的唯一位置就是[C1]。 第4种情况的例子如下: 在这个示例中,只是使用单元排除法和单元唯一法到这一步就继续不下去了。要想求得数字8在第6列的位置,就必须要借助区块排除法。先看第4列,通过位于[C3]和[I8]的数字8的行排除,使8在第4列可能填入的位置只剩下[D4]和[F4],而这两个单元格正好都在起始于[D4]的区块中。因为第4列不能没有数字8,而数字8如果填在区块中的其他位置(如[D6],[E6]或[F6])时将迫使[D4]和[F4]上不能再填入8,这样会导致第4列没有数字8。因此,第6列中的[D6],[E6]和[F6]能填入数字8的可能性被排除。这样第6列中就只剩下[B6]能填入8了。 实际解题过程中,还会碰到比较复杂的情况,看下面左图的谜题:         你能确定数字3在起始于[A1]的区块中的位置吗?先看位于[C5]的数字3,它不仅排除了同一行中[C1]和[C3]中填入3的可能性,也同时排除了同一行中[C8]和[C9]填入3的可能性,这使得在起始于[A7]的区块中,能填入3的位置只剩下[B8]和[B9],见上面右图 利用区块排除法,在起始于[A7]的区块中,无论3在[B8]还是[B9],行B中的其他位置都不能再填入3,所以[B1],[B2]和[B3]都被排除。于是,在起始于[A1]的区块中,能填入3的位置仅剩下[A1]和[A2]了。但至此我们还无法确定3的准确位置,这时我们还要借助于其他的辅助区块来进一步排除。 观察起始于[D1]的区块,利用[D7]位置上的3排除同一行的[D1],以及用[G3]位置上的3排除同一列的[E3]和[F3],使区块中可能填入3的位置只余[E2]和[F2],刚好这两个位置都在第2列中,符合上面介绍的第2种情况,于是可以把[A2]也排除掉。最后,我们就可以很肯定地在[A1]中填入数字3了。 这个例子同时使用了多个辅助区块同时参与排除。在实际使用中虽然这种情况并不常见,但却也不少见。关键在于如何能正确识别并恰当应用区块排除法。相信通过大量的练习并勤于分析思考,这种方法就可以运用自如,得心应手。 下面是其他的一些例子,可以帮助更好地理解并掌握这种技法: 唯一余数法 ( Sole Number Technique ) 唯一余数法是直观法中较不常用的方法。虽然它很容易被理解,所以说明这个方法不需要很大篇辐,然而在实践中,却不易看出能够使用这个方法的条件是否得以满足,从而使这个方法的应用受到限制。 与单元唯一法相比,唯一余数法是确定某个单元格能填什么数的方法,而单元唯一法是确定某个数能填在哪个单元格的方法。另外,应用单元唯一法的条件十分简单,几乎一目了然。 与候选数法相比,唯一余数法相当于显式唯一法。虽然显式唯一法是候选数法中最简单且应用最容易的方法,但在 直观法中却正好相反。 先看一个例子: 对于单元格[G9]应该填入什么数字,就算你把前面介绍的所有直观技法都用上,也不得而知。然而,我们通过观察它所在的行,列和区块,可以发现除了数字2以外,1到9中其他的数字都出现了,其中行G中包含了7,6,9,5,3和8,第9列中包含了数字5,8,7和1,起始于[G7]的单元格中包含了3,8,4,7,5和1。这样,如果[G9]不填入数字2,就一定会违反游戏“行,列或区块不能出现重复数字”的规则。所以[G9]中的数字一定是2 一下,就是如果某一单元格所在的行,列及区块中共出现了8个不同的数字,那么该单元格可以确定地填入还未出现过的数字。 怎么样,很简单吧,但在实践中却不那么容易识别。看下面的谜题: 你能看出来对哪个单元格应用唯一余数法吗? 还有这个谜题: 答案分别是[E6]=9和[I7]=9。 一般来说,只有在使用基本的排除方法都失效的情况下,才试着使用这个方法来解题。 组合排除法 ( Combination Elimination Technique) 组合排除法和区块排除法一样,都是直观法中进阶的技法,但它的应用范围要更小一点。一般情况下,基本没有机会用到这种方法解题,所以要找到相应的例子也都很困难。当然,如果你希望优先以这个技法来解题的话,还是能碰到很多能符合使用组合排除法条件的情况。 组合排除法,顾名思义,要考虑到某种组合。这里的组合既包括区块与区块的组合,也包括单元格与单元格的组合,利用组合的关联与排斥的关系而进行某种排除。它也是一种模糊排除法,同样是在不确定数字的具体位置的情况下进行排除的。下面先看一个例子(见下面左图):     对于上面这个谜题,你能确定数字6在起始于[G4]的区块中的位置吗? 要想获得正确的答案初看起来有些困难。因为虽然在[G9]和[H3]已经存在了两个6,但是利用它们只能行排除区块中的[G4]和[H6]两个单元格,还是无法确定6到底是在[I4]还是在[I5]中。这时候,组合排除法就派上用场了。 现在撇开起始于[G4]的区块,先看它上面的两个区块,即起始于[A4]和[D4]的区块。这几个区块的共同特点是占有同样的几列,也就是第4列至第6列,因此它们之间的数字会相互直接影响(见上右图)。 对于起始于[A4]的区块,利用[A1]处已有的数字6进行行排除,可以得到这个区块中可能填入6的位置只剩下两个:[B5]和[C6]。 对于起始于[D4]的区块,利用[E7]处已有的数字6进行行排除,可以得到这个区块中可能填入6的位置也剩下两个:[F5]和[F6]。 这时,我们仍无法确定6在这两个区块中的确切位置。但不妨对可能出现的情况作一下分析: 1. 假设在起始于[A4]的区块中,[B5]=6,则同一区块中的[C6]必不为6,而且[B5]还将列排除[F5],这样在起始于[D4]的区块中,只有[F6]=6。 2. 假设在起始于[A4]的区块中,[C6]=6,则同一区块中的[B5]必不为6,而且[C6]还将列排除[F6],这样在起始于[D4]的区块中,只有[F5]=6。 简单地说,只有两种可能:[B5]=6且[F6]=6,或者[C6]=6且[F5]=6。决不会再出现其他的情况。但无论是其中哪一种情况,第5列和第6列都会有确定的6出现在这两个区块中,也就是说,第5列和第6列的其他位置不可能再出现数字6。这样,原本无法肯定的6在起始于[G4]区块中的位置,一下子就变得明确了。 利用起始于[A4]和[D4]的区块对起始于[G4]的区块进行列排除,可以把[I5]排除掉,这样,就只剩下[I4]可以填入6了。 小结一下,组合排除法的要满足的条件如下: 1. 如果在横向并行的两个区块中,某个数字可能填入的位置正好都分别占据相同的两行,则这两行可以被用来对横向并行的另一区块做行排除。 2. 如果在纵向并行的两个区块中,某个数字可能填入的位置正好都分别占据相同的两列,则这两列可以被用来对纵向并行的另一区块做列排除。 让我们再看一个例子(下左图):     要想确定数字1在起始于[D4]的单元格中的位置,我们将设法借助于其横向上相邻两个区块的帮助。 利用[I2]的列排除,我们可以把起始于[D1]的区块中的[E2]和[F2]排除掉,这样,这个区块中能填入1的位置剩下[D1],[D3]和[E1]。 利用[H7]的列排除,可以把起始于[D7]的区块中的[E7]和[F7]排除掉,再利用[A9]的列排除,可以把这个区块中[E9]和[F9]排除掉,这样,这个区块中能填入1的位置只剩下[D8]和[E8]。 虽然在起始于[D1]的区块中,能填入1的位置多达3个,但是它们正好只分布在行D和行E上,而且在起始于[D7]的区块中能填入1的位置所占据的也是这两行。最终1的位置只可能有三种情况:[D1]=1且[E8]=1;或者[D3]=1且[E8]=1;或者[E1]=1且[D8]=1。无论是哪种情况,行D和行E都会有确定的1出现在这两个区块中,也就是说,这两行的其他位置不会再出现1。于是, 借助于这两个区块的行排除,我们可以把起始于[D4]的区块中的[D4]和[D6]排除掉,再利用[G4]位置的列排除,最终确定1的位置在[F6]。 下面是其他一些使用组合排除法的例子:   在实践中,组合排除法的实际应用机会不如区块排除法多。但是,掌握这一技法无疑可以大大提高求解谜题的灵活性,从而增加解题的乐趣。 矩形排除法 ( Rectangle Elimination Technique) 矩形排除法虽然浅显易懂,但一般在实际解题的时候应用得却比较少。这是因为即使谜题中存在满足使用这一方法的情况,也很难直接看出来。然而,相对组合排除法而言,在解题过程中倒是能有更多的机会用上矩形排除法。下面先看一个例子(下左图):     对于这个谜题,如果不用矩形排除法是无法继续下去的。我们将通过讲解这种技法,从而找到数字8在起始于[G1]的区块中的位置。乍看之下,好象一筹莫展。因为[B2]和[E3]上的8只能列排除左下角这个区块中的[G2], [H2],[G3]和[I3]这4个单元格,这时仍剩下两个单元格[G1]和[H1]无法确定。 让我们先来留意一下第6列,这一列中暂时没有8,那么8可能会填入哪几个单元格中呢?首先,[B2]中的8行排除了[B6],而[E3]和[F4]中的8又分别行排除了[E6]和[F6]。这样,能填入8的位置就只剩下[C6]和[I6]了。见上右图: 同样,对于第9列,由于[F4]的行排除,[F9]不可能填8,所以这一列能填入8的位置也就只剩下[C9]和[I9]了。 凑巧的是,这两列中能填入8的位置都在同样的两行上,即行C和行I。这时就为我们应用矩形排除法创造了前提条件。 如果第6列中[C6]=8,那么[I6]和[C9]一定不能是8。而第9列这时就只剩下[I9]能填入8了; 又或者如果第6列中[I6]=8,那么[C6]和[I9]一定不能是8,而第9列就只剩下[C9]能填入8了。 不可能再有第3种情况。所以,要么[C6]=8且[I9]=8,要么[I6]=8且[C9]=8。但无论是哪种情况,不难发现,行C和行I都已填入了8,所以这两行的其他位置不可能再填入8。我们正好可以利用这一点来进行排除。 观察起始于[G1]的区块,我们已经知道现在只剩下[G1]和[I1]两个单元格无法确定了,通过上面的分析,利用矩形排除法排除位于行I上的[I1],就可以确定数字8一定在[G1]上。 总结一下,使用矩形排除法的条件如下: 1. 如果一个数字在某两行中能填入的位置正好在同样的两列中,则这两列的其他的单元格中将不可能再出现这个数字; 2. 如果一个数字在某两列中能填入的位置正好在同样的两行中,则这两行的其他的单元格中将不可能再出现这个数字。 让我们再来看一个例子(下左图):       做到这一步时,不用矩形排除法的话恐怕是走投无路了。这次还是要在起始于[G1]的区块中找到数字4的位置。但我们无法确定4究竟在[G2]还是[G3]呢? 先要找找看有没有满足矩形排除法条件的情况存在。观察行B,在这一行中,由于[C5]的区块排除,[B4]和[B5]都不能为4,再加上[H8]列排除了[B8],这样行B中能填入4的位置包括[B1]和[B3]。 再看行F,由于[D6]的列排除,使得[F6]不能填4,所以行F中能填入4的位置只有[F1]和[F3]。 幸运的是,行B和行F中能填入4的位置正好都位于同样的两列上,即第1列和第3列。根据上面矩形排除法的规则,第1列和第3列中不在行B和行F上的单元格中不能填入4,所以[G3]不能为4。这样,起始于[G1]的区块中就只有[G2]能填入4了。 下面是应用矩形排除法的其他一些例子,希望可以帮助大家快速掌握这种方法: 矩形排除法可以说是直观法中最困难的技法,因为当前的谜题即使满足应用这一方法的条件,也实在太难发现了。一般情况下,尽量先使用其他相对简单的直观法。如果最后连矩形排除法都用上还是无法解题,你可能就需要尝试候选数删减法了。 候选数法(Candidates Elimination Techniques) 对于解决数独谜题,最常使用的方法就是直观法和候选数法。在谜题相对简单时,直观法可以取得相当好的效果。但是如果谜题比较复杂,直观法的效果就十分有限,即使通过试探性填数也不一定能够解题,而这时候选数法却可以很好地发挥作用。在对数独谜题求解的电脑程序的上,候选数法也因为高效易实现而被广泛应用。 如果用候选数法来解题,必须首先准备一张如下图所示的候选数栅格表: 初始化时,每个单元格中都包含了1至9所有的数字,它表示该单元格中在解题时还可以选择填入的数字。很明显,不在候选数中的数字是不能够填入该单元格中的。如果某一单元格中已填入一个确定的数字,则根据数独游戏的规则,即该单元格所在行,列及区块中都不能再出现这个数字,则该数字应从这些单元格中的候选数字中去除。对于下面的这个谜题: 每填入一个数字时,都要将该单元格中的候选数全部删除,同时扫描其所在行,列和区块,看它们所覆盖的单元格上的候选数中有无该数字: 如果有,就把该数字从候选数中删除: 同理,填入谜题中其他的初始数字,并删除这些数字各自所在行,列和区块候选数中的该数字,可以得到下面的候选数栅格表: 注意,填入数字的顺序与最终的候选数栅格表无关。 这时,我们发现每个单元格中的候选数已经比最初少了许多,真是一个令人兴奋的开始。随后,我们将辅以各种候选数删减技巧,进一步减少候选数的个数,当某单元格中只剩下唯一的候选数时,该单元格就得到了它的唯一解。细心的朋友已经发现,在上面的候选数栅格表中,单元格[I1]中已经剩下唯一候选数1,这时我们就可以通过显式唯一法来解题了。 在候选数删减法中,常用的算法包括: 1. 显式唯一法 (Naked Single) 2. 隐式唯一法 (Hidden Single) 3. 区块删减法 (Intersection Removal) 4. 显式数对法 (Naked Pair) 5. 显式三数集法 (Naked Triplet) 6. 显式四数集法 (Naked Quad) 7. 隐式数对法 (Hidden Pair) 8. 隐式三数集法 (Hidden Triplet) 9. 隐式四数集法 (Hidden Quad) 10. 矩形对角线法 (X-wing) 11. XY形态匹配法(XY-wing) 12. XYZ形态匹配法(XYZ-wing) 13. 三链数删减法 (Swordfish) 14. WXYZ形态匹配法(WXYZ-wing) 显式唯一法 (Naked Single) 这是候选数删减法中最简单的一种方法,就是扫描候选数栅格表,如果哪个单元格中只剩下一个候选数,就可应用显式唯一法,在该单元格中填入这个数字,并在相应行,列和区块的候选数中删除该数字。 在下面的图中: 单元格[I1]有唯一的候选数1,则毫无疑问地把数字1填入该单元格中,并扫描其所在行,列和区块的候选数中有无数字1: 如果有,则把1从这些单元格的候选数中删除: 显式唯一法虽然简单,但却是最有效的候选数删减法之一;尤其在谜题相对简单时,有时单单使用显式唯一法就可以解题。 隐式唯一法 (Hidden Single) 见文知义,隐式唯一法也是唯一候选数法的一种,但它肯定不如显式唯一法那样显而易见。我们知道,如果某一个单元格中只有一个候选数字,这时可以毫不犹豫地填入它;但是有没有这种情况,即使某个单元格中有不止一个候选数字,我们也可以轻易地推断出这个单元格的正确解答呢? 考虑下面左图的情况:   在第7列中,单元格[B7]中虽然有多个候选数,但观察整列后我们发现,只有这个单元格中有数字6。根据数独游戏的规则,每一列中都必须要有从1到9的所有数字,而同时6却只能出现在这个单元格中,所以很显然[B7]=6。当然,别忘了把6从[B7]所在的行,列和区块中删除。 同样,在上右图中: 观察行B后我们发现,只有单元格[B8]中含有数字7。同理,[B8]是该行中唯一可以填入数字7的单元格,所以[B8]=7。另外,我们还要扫描相应行,列和区块,删除其中的候选数7。 当然,这种隐藏的唯一候选数也可能躲在区块中,看下图: 对于起始于[A1]的区块而言,数字8只出现在单元格[A2]的候选数中,所以[A2]=8。从相应行,列和区块,删除其中的候选数8。 隐式唯一法是显式唯一法的有力补充,很多稍复杂的题都可以在这两种方法的交替使用下得以解决。 区块删减法 (Intersection Removal) 应用显式唯一法和隐式唯一法只能解决简单的谜题,遇到稍复杂的谜题,还是要靠其他的方法。区块删减法也是比较常用的方法,它的目的是尽量删减候选数,而不一定要生成某一单元格的唯一解(当然,产生唯一解更好)。区块删减法是利用区块中的候选数和行或列上的候选数之间的交互影响而实现的一种删减方法,它分为两种情况: ∙ 区块对行或列的影响 观察下图: 可以看到在起始于[A7]的区块中,数字9只出现在[A9]和[C9]的候选数中,更巧的是,[A9]和[C9]正好都在同一列上,即第9列。这时就可以应用区块删减法了。具体地说,在起始于[A7]的区块中,数字9只能填在[A9]或是[C9]中,又因为这两个单元格都在第9列上,所以无论数字9填在哪个单元格中,第9列的其他单元格中都不能再填数字9,所以要把9从它们的候选数中删除。在上图中,位于第9列的单元格[E9]中的候选数9将被删除。 下图说明的是区块对行的影响: 在起始于[G1]的区块中,只有[H2]和[H3]可以填入数字3,而这两个单元格正好都在行H中。同样的道理,在这个区块中无论数字3填入[H2]还是[H3],行H中的其他单元格中都不可能再填入3,所以在单元格[H4],[H6]和[H7]的候选数中的3将被删除。 ∙ 行或列对区块的影响 与“区块对行或列的影响”相近但却不同,“行或列对区块的影响”着重于先对行或列进行分析。 观察下左图:     在第5列中,8只出现在[D5]和[F5]的候选数中;也就是说,第5列中的数字8只能填入这两个单元格其中的一个。碰巧的是,这两个单元格正好都位于起始于[D4]的区块中,结果使得这一区块中的数字8也不能填入区块的其他单元格中,所以[D4],[E4],[E6]和[F6]的候选数中的8将被删除。 同样,上右图说明了行对区块的影响: 在行E中,只有[E5]和[E6]能填入数字6,而这两个单元格又刚好都在起始于[D4]的区块中,所以该区块中的其他单元格内不能再填入数字6,即6将从单元格[D5]和[F5]的候选数中删除。 总结一下区块删减法的条件,就是 1. 在某一区块中,当所有可能出现某个数字的单元格都位于同一行时,就可以把这个数字从该行的其他单元格的候选数中删除。 2. 在某一区块中,当所有可能出现某个数字的单元格都位于同一列时,就可以把这个数字从该列的其他单元格的候选数中删除。 3. 在某一行(列)中,当所有可能出现某个数字的单元格都位于同一区块中时,就可以把这个数字从该区块的其他单元格的候选数中删除。 虽然区块删减法应用比较广泛,但是还是要先给大家泼盆冷水。因为在很多时候,即使满足了区块删减的条件,也可能会发生没有候选数可以删减的情况,让人空欢喜一场。其实,这个问题对其他稍复杂的方法都是普遍存在的。 显式数对法 (Naked Pair) 显式数对法在很多谜题中都可以得到应用,它的条件比较容易满足,而且显而易见。 先看下图: 在行E中,[E2]和[E8]中候选数只有两个,且都是2和3,即构成一个{2, 3}的数对。这使得该行中其他单元格中不能再出现2或3。为什么呢,因为假设[E2]=2,则[E8]一定要填3;反之,假设[E2]=3,则[E8]则一定填2,不会再出现其他的情况。所以2和3必然不能成为该行中其他单元格的候选数。这样,[E3],[E4]和[E5]的候选数中都不能再有2和3。 对于列也是这样: 在第3列中,数对{6, 8}只出现且都出现在[A3]和[H3]中,所以其他单元格里都不能再有这两个数字。这样,[C3]的候选数中将删除6和8,而[F3]的候选数中将删除8。 同样,别忘了还有区块: 观察起始于[G4]的区块,可以发现[G5]和[I4]中含有数对{2, 4},这样,该区块中其他的单元格里都不能再有数字2和4,这次受影响的有4个单元格,分别是[G4],[H4],[I5]和[I6]。 总结一下显式数对的条件,也就是,在一个行,列或区块中,如果有两个单元格都包含且只包含相同的两个候选数,则这两个候选数字不能再出现在该行,列或区块的其他单元格的候选数中。 显式三数集法 (Naked Triplet) 显式三数集法并不如显式数对法那样常见,但它们的原理却很相似。显式数对法要求同样的2个数字都出现在某行,列或区块的2个单元格中,且这2个单元格的候选数不能包含其他的数字。同样,显式三数集法要求的是3个数字要出现在3个位于同一行,列或区块的单元格中,且这3个单元格的候选数中不能包含其他数字。但不同的是,显式三数集法不要求每个单元格中都要包含这3个数字。例如,对于数字集{2,4,5},如果在某行,列或区块中有3个单元格的候选数分别为下面几种情况时,都可应用显式三数集法,即3个单元格的候选数集可以分别为: {2, 4, 5} {2, 4, 5} {2, 4, 5},或 {2, 4} {4, 5} {2, 5},或 {2, 4, 5} {2, 5} {4, 5},或 {2, 4, 5} {4, 5} {2, 4, 5},或 ...... 也就是说,要形成显式三数集,则必须要有3个在同一行,列或区块中的单元格,每个单元格中至少要有2个候选数,且它们的所有候选数字也正好都是一个三数集的子集。由于这个三数集中的3个数字正好可以分别填入这3个单元格中,所以该行,列或区块中其他的单元格中不可能再填入这3个数字。 但要注意的是,下面的这种情况不是显式三数集:{2, 4, 5} {2, 4} {2, 4} 其中{2, 4}和{2, 4}可应用显式数对法,所以第一个候选数集{2, 4, 5}将只能剩下候选数5,这时就可应用显式唯一法了。 看下图: 在行D中,[D1],[D7]和[D8]中分别包含候选数集{3, 5, 9},{3, 5, 9}和{5, 9},根据上面的知识,可以判断出这是一个显式三数集,因此数字3,5和9不可能再出现在行内其他的单元格中,所以[D4]和[D6]的候选数中的3,5和9将被删除。 下面是列中的显式三数集的例子: 在第2列中,[G2],[H2]和[I2]中分别包含候选数集{2, 6},{2, 5}和{2, 5, 6},所以数字2,5和6只能在这三个单元格中分别填入,而不可能填入到该列的其他单元格中,因此[A2],[B2]和[E2]的候选数中的2,5和6将被删除。 细心的朋友可能还发现,[G2],[H2]和[I2]不仅都在第2列中,而且又恰好都在起始于[G1]的区块中,对于数字5,已经符合区块删减法的条件,可惜的是,第2列中其他单元格的候选数中都没有5可以删减。 同样,显式三数集还有在区块中的可能: 在起始于[D7]的区块中,[D8],[D9]和[E9]中分别包含了候选数集{4, 9},{4, 8, 9}和{8, 9},这样区块中其他的单元格中不能再填入数字4,8和9,可以删减的单元格是[E7]和[E8]。 显式四数集法 (Naked Quad) 显式四数集法比较少见,如果你已经对显式三数集法比较了解,则对显式四数集法也会很快掌握。 先举个例子,对于数字集{1, 2, 4, 5},如果在某行,列或区块中有4个单元格的候选数分别为下面几种情况时,都可应用显式四数集法,即4个单元格的候选数集可以分别为: {1, 2, 4, 5} {1, 2, 4, 5} {1, 2, 4, 5} {1, 2, 4, 5},或 {1, 2, 4} {1, 4, 5} {2, 5} {1, 2},或 {1, 2, 4, 5} {2, 5} {2, 4, 5} {1, 2, 4, 5},或 {2, 5} {4, 5} {1, 2, 5} {1, 2, 4},或 {1, 2, 5} {1, 2, 4, 5} {1, 2, 4, 5} {2, 4},或 ...... 这样的组合情况可以很多。也就是说,要形成显式四数集,则必须要有4个在同一行,列或区块中的单元格,每个单元格中至少要有2个候选数,且它们的所有候选数字也正好都是一个四数集的子集。由于这个四数集中的4个数字正好可以分别填入这4个单元格中,所以该行,列或区块中其他的单元格中不可能再填入这4个数字。 但要注意的是,下面的这种情况不是显式四数集:{1, 2, 4, 5} {2, 4} {2, 5} {2, 4, 5} 其中{2, 4} {2, 5}和{2, 4, 5}可应用显式三数集法,所以第一个候选数集{1, 2, 4, 5}将只能剩下候选数1,这时就可应用显式唯一法了。 看下图: 很明显,在行D中,[D1],[D4],[D6]和[D8]中分别包含了候选数集{3, 5, 6},{2, 5, 6},{2, 5, 6}和{3, 5, 6},即分别都是四数集{2, 3, 5, 6}的子集。这样在行D中,数字2,3,5和6就只能填入这4个单元格中,所以[D3]和[D7]的候选数中将不能包含这几个数字。 下面是显式四数集在列中的例子: 在第9列中,[C9],[D9],[E9]和[G9]中分别包含了候选数集{1, 7, 8},{1, 8},{6, 7, 8}和{6, 7, 8},即分别都是四数集{1, 6, 7, 8}的子集。这样数字1,6,7和8就不能填入该列中除这四个单元格之外的单元格中,所以[A9]和[B9]的候选数中将不能出现这四个数字。 同样,显式四数集也可以出现在区块中: 在起始于[A7]的区块中,[B9],[C7],[C8]和[C9]中分别包含了候选数集{6, 7},{1, 6, 8},{7, 8}和{1, 6, 7, 8},即它们分别都是四数集{1, 6, 7, 8}的子集。这样,数字1,6,7和8就不能填入该区块中除这四个单元格之外的单元格中,所以[A7]和[A8]的候选数中将不能出现这四个数字。 当然,掌握了显式四数集法,我们同样可以演绎出显式五数集法,显式六数集法等,但因为显式四数集法出现的几率已经较小,所以我们不指望推演出的更多方法能在解决数独谜题上带给我们有效的帮助。 隐式数对法 (Hidden Pair) 对比显式数对法,隐式数对法也需要在同一行,列或区块中寻找两个单元格,而这两个单元格上都包含有一个数对(两个数字),且这个数对不会出现在该行,列或区块的其他单元格上。然而,应用隐式数对法却要困难得多,因为它与显式数对法不同的是,包含有数对的单元格的候选数中可能还包含有其他的数字。 先看下图: 可以看到,在行A中,数对{3, 6}只出现在[A4]和[A8]的候选数中,也就是说,数字3和6不可能再出现在该行的其他单元格中,这是因为这两个单元格中必然只能填入3和6,否则该行将缺少这两个数字。这样,如果[A4]=3,则[A8]=6;反之,如果[A4]=6,则[A8]=3,不会再有其他的情况。所以我们可以放心地把其他的数字从这两个单元格的候选数中删除。 下面是隐式数对在列中的例子: 在第1列中,数对{2, 9}只出现在[G1]和[I1]的候选数中,这样就符合了上面所述的隐式数对的条件,所以可以很安全地把其他数字从这两个单元格的候选数中删除,使这两个单元格中只保留了显式数对{2, 9}。 在区块中也是如此: 在起始于[D4]的区块中,数对{2, 8}只出现在[E6]和[F6]的候选数中,所以这两个单元格上其他的候选数将被删除,而只保留了数对{2, 8}。 总结一下,隐式数对的条件是,在同一行,列或区块中,如果一个数对(两个数字)正好只出现且都出现在两个单元格中,则这两个单元格的候选数中的其他数字可以被删除。 隐式数对不象显式数对法那么容易发现,所以在解题时需要相对的耐心和细心。与显式数对法不同的是,隐式数对法只影响出现隐式数对的单元格,而不影响其所在行,列或区块的其他单元格,这是因为这些其他的单元格中都不包含有这个数对。但通过隐式数对法删减了候选数后,隐式数对将转化为显式数对,可能会为其他的行,列或区块应用各种候选数删减法创造条件。 隐式三数集法 (Hidden Triplet) 与隐式数对法类似,这次需要3个数字和3个单元格。即当某个3个数字只出现在某行,列或区块的3个单元格中,且每个单元格中至少包含有其中的2个数字时,则可以把其他数字从这3个单元格的候选数中删除。与显式三数集法类似,举例来说,对于三数集{2, 4, 5},如果某行,列或区块中的三个单元格的候选数集依次为以下情况时,都符合隐式三数集的条件: {2, 4, 5, 8} {1, 2, 4, 5} {2, 3, 4, 5, 9},或 {2, 4} {2, 3, 5} {4, 5, 7},或 {4, 5} {2, 5, 8} {1, 2, 3, 4, 5},或 {1, 2, 5} {2, 4, 8} {4, 5, 9},或 ...... 具体分析先看下图: 在行H中,三数集{5, 8, 9}中的任何数字都只出现在[H1],[H3]和[H5]的候选数中,其中[H1]包含了数字5和9;[H3]包含了数字8和9;而[H5]中包含了数字5和8。这说明数字5,8和9只能填入这三个单元格中,所以其他候选数不能出现在这三个单元格中。因此数字1和3将从[H1]的候选数中删除,而数字3和4将从[H3]的候选数中删除。 下面是隐式三数集在列中的例子(下左图):     在第7列中,三数集{3, 7, 9}中的任何数字都只出现在[F7],[G7]和[H7]的候选数中,其中[F7]包含了数字3和7;[G7]包含了数字3和9,而[H7]包含了数字3,7和9。这样,就符合了隐式三数集法的基本条件,不在这个三数集内的数字将从这三个单元格的候选数中删除。 隐式三数集还有可能发生在区块内(上右图): 在起始于[G7]的区块中,三数集{3,6,7}中的任何数字都只出现在[G8],[G9]和[H8]的候选数中,其中[G8]包含了数字3,6和7;[G9]包含了数字3和7,而[H8]包含了数字3和6。这样,就符合了隐式三数集法的基本条件,不在这个三数集内的数字将从这三个单元格的候选数中删除。 隐式三数集法属于难度比较高的方法,在处理一般谜题时较少碰到。隐式三数集法只影响包含隐式三数集的三个单元格,与隐式数对法相似,删减的结果是把隐式三数集转换为显式三数集,并可能为使用其他的候选数删减法创造条件。 隐式四数集法 (Hidden Quad) 这是一个极少用到的方法,因为它的条件比较难以满足。与隐式三数集法类似,这次需要4个数字和4个单元格。即当某个4个数字只出现在某行,列或区块的4个单元格中,且每个单元格中至少包含有其中的2个数字时,则可以把其他数字从这4个单元格的候选数中删除。与显式四数集法类似,举例来说,对于四数集{1, 2, 4, 5},如果某行,列或区块中的四个单元格的候选数集依次为以下情况时,都符合隐式四数集的条件: {1, 2, 3, 4, 5} {1, 2, 4, 5, 8} {1, 2, 4, 5} {1, 2, 4, 5, 9},或 {1, 2, 4} {1, 5, 8} {2, 3, 5} {4, 5, 7},或 {4, 5} {1, 2, 4, 6} {2, 5, 8} {1, 2, 3, 4, 5},或 {1, 2, 3, 5} {1, 5} {2, 4, 8} {4, 5, 9},或 ...... 象这样的组合可能会有很多。 具体分析先看下左图:     在行A中,四数集{2, 4, 8, 9}中的任何数字都只出现在[A4],[A6],[A7]和[A8]的候选数中,其中[A4]包含了数字2和4;[A6]包含了数字2,4和8;[A7]包含了数字4和9,而[A8]包含了数字2,8和9。这样,就符合了隐式四数集法的基本条件,不在这个四数集内的数字将从这四个单元格的候选数中删除。 当然,我们也可以看到,即使不用隐式四数集法,由于[A3]和[A5]形成了明显的显式数对,同样也可用显式数对法对该行其他单元格候选数的删减。这里,我们为了讲解隐式四数集法,所以优先使用该方法。这也说明能应用这种方法的机会很少,因为经过很多较简单方法对候选数进行多番删减以后,已经较难满足隐式四数集的基本条件。 同样,上右图的谜题,我们本来可以用显式数对法来解决,但这里暂时优先使用隐式四数集法: 在第6列中,四数集{1, 4, 8, 9}中的任何数字都只出现在[A6],[D6],[E6]和[I6]的候选数中,其中[A6]包含了数字1和4;[D6]包含了数字1,8和9;[E6]包含了数字4和9,而[I6]包含了数字8和9。这样,就符合了隐式四数集法的基本条件,不在这个四数集内的数字将从这四个单元格的候选数中删除。 当然,在区块中也可应用隐式四数集法,因为鲜少有这样的例子,且与上面介绍的行与列中的隐式四数集类似,所以这里不再举例。 隐式四数集法只影响包含隐式四数集的四个单元格,与隐式数对法相似,删减的结果是把隐式四数集转换成显式四数集,并可能为使用其他的候选数删减法创造条件。这个方法一般在解决较为复杂的谜题时才有可能用到。 矩形对角线法 (X-wing) 矩形对角线法是比较高级的谜题解法,应用的机会比较少,但对于有些复杂的谜题也可以有效地删减候选数。 先观察下图 在行B和行G中,数字7都正好出现两次,且都位于第2列和第7列上;也就是说,在行B和行G中,数字7不是填入第2列,就是填入第7列。 而如果在行B中,[B2]=7,则对于行G,[G2]就不能是7,这是因为[G2]和[B2]在同一列上,这样[G7]就一定是7。 反之,如果在行B中,[B7]=7,则对于行G,[G7]就不能是7,7只能在[G2]。 简单地说,只可能有两种情况:[B2]=7且[G7]=7;或者[B7]=7且[G2]=7。 但无论是哪种情况,第2列和第7列中都肯定会出现数字7,所以这两列中其他的单元格中就不可能再有7。这样,就可以把7从其他的单元格的候选数中删除了,所以第2列中的[A2]以及第7列中的[C7],[D7]和[E7]的候选数中将不会再有7。 总结一下,如果一个数字正好出现且只出现在某两行的相同的两列上,则这个数字就可以从这两列上其他的单元格的候选数中删除。 当然,同样的情形也会出现在列中,也就是说,如果一个数字正好出现且只出现在某两列的相同的两行上,则这个数字就可以从这两行上的其他单元格的候选数中删除。例如: 可以看到,在第1列和第7列上,数字9出现且只出现在行C和行G上,也就是说,在第1列中,要么[C1]=9,要么[G1]=9;而对于第7列,要么[C7]=9,要么[G7]=9。而对于这两列只有两种情况,[C1]=9且[G7]=9;或者[C7]=9且[G1]=9。无论是上述哪种情况,行C和行G上都会有数字9出现,则这两行上其他的单元格中不能再有9。所以行C上的[C4]和[C5]以及行G上的[G2]和[G5]候选数中的9将被删除。 矩形对角线法不可能出现在区块中。 XY形态匹配法(XY-wing) XY形态匹配法虽然是一个高级的数独技巧,但是应用的机会却还挺多的。先看看XY形态究竟是怎样的: 上图所示是四个相邻的(也可不相邻)区块。XY,XZ和YZ分别表示只有两个候选数的单元格,但它们的候选数部分重叠。可以看到,不管XY最后取什么值,星号所示的位置不可能是Z值。这是因为: 1. 如果XY取X值,则与其同行的XZ只能取Z值,这样星号所示单元格就不能为Z值。 2. 如果XY取Y值,则与其同列的YZ只能取Z值,而星号所示的单元格同样不能是Z值。 于是,就可以把Z值从星号所示的单元格中去除。下面是一个实例: 上图中,单元格[F3]是XY,[F6]是XZ,[I3]是YZ,这三个单元格分别位于不同的区块中。其中X是3,Y是9,Z是5。根据我们上面的分析,在单元格[I6]中的候选数5将被删除。 XY形态的第二种表现方式如下: 这时,XY和YZ同在一个区块但不同行中,而XZ和XY在同一行,但在不同区块中。同样,所有打星号的单元格中不能是Z值。这是因为: 1. 如果XY=X,则XZ=Z。那么XZ所在的行和区块中就不能再出现Z; 2. 如果XY=Y,则YZ=Z。那么YZ所在的行和区块中就不能再出现Z。 这种情况比第一种XY形态更为常见,看下面这个实例: 在上图中,单元格[D7]是XY,[D2]是XZ,[E8]是YZ,XY和YZ在同一区块中,而XZ在横向的另一区块中。其中X=4,Y=9,Z=7。根据上面的分析,则[E2]和[D8]中的候选数7将被删除。 当然还会出现第二种XY形态的变形,即XY和YZ在同一区块但不同列中,而XY和XZ在同一列的不同区块中: 分析方法与之前一样,结果是打星号的单元格中不能出现候选数Z。例: 在上图中,单元格[I8]是XY,[B8]是XZ,[G9]是YZ,XY和YZ在同一区块中,而XZ在纵向的另一区块中。其中X=3,Y=2,Z=6。根据上面的分析,则[A9],[B9],[C9]和[H8]中的候选数7将被删除。 下面是其他的一些应用XY形态匹配法的例子:   XYZ形态匹配法(XYZ-wing) XYZ形态匹配法很象XY形态匹配法,但不同的是,这次有一个单元格包含3个候选数。典型的XYZ形态如下: 其中,XYZ表示该单元格有三个候选数,它与YZ在同一区块但不同列中,而与XZ在同一列但不同区块中。如果满足这样的条件,则星号所示的单元格中一定不能包含候选数Z。这是因为: 1.如果XYZ=X,则YZ必然为Z。那么在同一区块中的星号所示的单元格自然就不能为Z。 2.如果XYZ=Y,则XZ必然为Z。那么与XZ同一列的星号所示的单元格自然也就不能为Z。 3.如果XYZ=Z,则与它同一区块的星号所在的单元格肯定不能是Z。 这样,我们就实现了对星号所在的单元格中候选数的删减。看一个例子: 在上图中,[D5]=XYZ,[D6]=YZ,[B5]=XZ。[D5]和[D6]在同一区块中,[D5]和[B5]在同一列中。其中,X=9,Y=7,Z=6。根据上面的分析,单元格[F5]中将不能含有候选数6。 当然,XYZ形态也有横向的变形: 分析的方法与之前一致,结果是把候选数Z从星号所示的单元格中删除。例: 在上图中,[B2]=XYZ,[C3]=YZ,[B9]=XZ。[B2]和[C3]在同一区块中,[B2]和[B9]在同一行中。其中,X=2,Y=5,Z=4。根据上面的分析,单元格[B1]中将不能含有候选数4。 下面是其他的一些实例,可以帮助快速掌握这一技法:   三链数删减法 (Swordfish) 能够应用三链数删减法的场合真是太少了,下面的例子是在经历无数次尝试后才找到的。这个方法是X形态匹配法的一种扩展。这次要考虑的是3行和3列,而不是2行和2列。 先看下图: 观察数字9,在第1列,9只出现在[A1]和[E1],在第4列,9只出现在[E4]和[I4],而在第5列,9只出现在[A5]和[I5];也就是说,对于第1列,第4列和第5列而言,数字9在每列只出现两次,且一共只出现在3行上,即行A,行E和行I。 现在我们把数字9在这几列中所有可能的位置都列举出来: 1. 对于第1列,假设[A1]=9,则行A中[A5]必不为9,所以对于第5列,只可能[I5]=9,这时行I中[I4]不能为9,则对于第4列,只有[E4]=9。 2. 对于第1列,假设[E1]=9,则行E中[E4]必不为9,所以对于第4列,只可能[I4]=9,这时行I中[I5]不能是9,则在第5列中,只有[A5]=9。 所以在这个例子中,只会有两种可能,就是9要么同时出现在[A1],[E4]和[I5]中,要么同时出现在[A5],[E1]和[I4]中。 无论是哪种可能,行A,行E和行I中都会有9出现,则这三行中的其他单元格上将不能再出现9。所以[A6]和[E2]候选数中的9将被删除。 总结一下,如果某个数字在某三列中只出现在相同的三行中,则这个数字将从这三行上其他的候选数中删除。 同样,如果某个数字在某三行中只出现在相同的三列中,则这个数字也将从这三列上其他的候选数中删除。例如 在这个示例中,数字6在行C,行F和行H的位置只在第5列,第7列和第8列上。这样就满足了使用三链数删减法的条件。结果是把数字6从第7列的[G7]和[I7]中,以及从第8列的[G8]中删除。 三链数删减法不可能出现在区块中。 WXYZ形态匹配法(WXYZ-wing) WXYZ形态匹配法是更加进阶的形态匹配法,但它将涉及到一个单元格包含4个候选数的情况。典型的WXYZ形态如下: 其中WXYZ表示拥有4个候选数的单元格,它与WZ在同一区块但不同列中,而与XZ和YZ在不同区块但在同一列中。满足了这样的形态后,星号所示的单元格中将不能含有候选数Z。这是因为: 1. 如果WXYZ=W,则WZ必为Z,而同一区块中的星号所示的单元格中必然不能填入Z。 2. 如果WXYZ=X,则XZ必为Z,而同一列中的星号所示的单元格中不可能再填Z。 3. 如果WXYZ=Y,则YZ必为Z,而同一列中的星号所示的单元格中不可能再填Z。 4. 如果WXYZ=Z,则同一区块中的星号所示的单元格中不能再为Z。 所以无论WXYZ填什么,星号所示的单元格都不能填入Z。看一个实例: 在上图中,[A8]=WXYZ,[A9]=WZ,[F8]=XZ,[G8]=YZ。[A8]和[A9]在同一区块中,而[A8]和[F8]及[G8]在同一列中。其中,W=2,X=4,Y=6,Z=5。于是,根据上述分析,[B8]中的候选数5将被删除。 当然也存在WXYZ形态的其他变形: 分析方法也同上。这时,星号所示的单元格为与WXYZ在同一区块及同一行的单元格,它们将不能填入候选数Z。再看一个例子: 在上图中,[G3]=WXYZ,[I1]=WZ,[G5]=XZ,[G7]=YZ。[G3]和[I1]在同一区块中,而[G3]和[G5]及[G7]在同一行中。其中,W=2,X=3,Y=7,Z=1。于是,根据上述分析,[G2]中的候选数1将被删除。 下面是其他的一些例子: 文档已经阅读完毕,请返回上一页!
/
本文档为【数独专题(好)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索