1、数独(SuDoku )介绍 数独 是一种源 自 18 世纪末的 瑞士, 后在美国发展、 并在日本得以发扬光大的数学智力拼图游戏。 拼图是九 宫格(即 3 格宽3 格高)的正方形状,每一格又细分为一个九宫格。在每一个小九宫格中,分别填上 1 至 9 的数字, 让整个大九宫格每一列、每一行的数字都不重复。 数独的玩法逻辑简单,数字排列方式千变万化。不少教育者认为数独是锻炼脑筋的好方法。 历史 如今数独的雏型首先于 1970 年代由美国的一家数学逻辑游戏杂志发表,当时名为 Number Place 。现今流 行的数独于 1984 年由日本游戏杂志 通信 发表并得了现时的名称。 数独本是“ 独立的数字
2、” 的省略,因为每一个方格都填上一个个位数。 数独冲出日本成为英国当下的流行游戏,多得曾任 香港高等法院法官的高乐德 (Wayne Gould)。2004 年,他在日本旅行的时候,发现杂志的这款游戏, 便带回伦敦向泰晤士报推介并获得接纳。英国 每日邮报也于三日后开始连载,使数独在英国 正式掀起热潮。其他国家和地区受其影响也开始连 载数独。 数独术 语 要理解如何对一个数独题求解,我们先来介绍一些 在本网站中使用的术语。 单元格 和值 一个数独谜题通常包含有 9x9=81 个单元格,每个 单元格仅能填写一个值。对一个未完成的数独题, 有些单元格中已经填入了值, 另外的单元格则为空, 等待解题者来
3、完成。 行和列 习惯上, 横为行, 纵为列, 在 这里也不例外。 行由横向的 9 个单元格组成, 而列由纵向的 9 个单元格 组成。 很明显, 整个谜题由 9 行和 9 列组成。 为了 避免混淆, 这里用大写英文字母和数字分别表示行和列。 例如, 单元格G6指 的是行 G 和第 6 列交界处的单元格,它已填入了值 7 。 区块 术语区块指的是起始于特定位置的 9 个相 邻的单元格组。在上图中,区块用交替相间的背景颜色来注明。 例如,对于最左上角的区块,我们表示为起始于A1的 区块。 单元 任何一行,一列或一个区块都是一个单元。每个单元都必须包含全部但不重复的数字 1 到 9 。 数独题 目难
4、度 很多人认为数独题目的难度取决于已填入谜题中的数字的数量,其实这并不尽然。一般来说,填入的数字 越多,题目就越容易求解。然而实际上,有很多填入数字多的题目比填入数字少的题目要难得多。这就需 要有其他的方法来确定的难度。 在应用中使用得比较多的一种方法是看看要解决一道数独题目需要用到哪些数独技巧。极简单的题目用到 的可能只是最基本的技巧。而相对复杂的题目可能要用到十分高深的解题方法。通过这样来设定游戏的难 度相对而言较为客观。 数独的 变化 人们总是不满足于已有的一切。同样,对于普遍使用的 9x9 谜题而言, 大量涌现的变形数独题也在不断丰 富着数独家族。 一种比较常见的数独变形是大小上的改变
5、。 现在已有的大小包括:4x4 ,6x6 ,12x12 ,16x16,25x25,甚 至还有 100x100。 另一种数独变形题是在原数独规则的基础上加入其他的规则。譬如 X 形数独就要求除原来的数独规则外, 连主对角线上的单元格也要满足数字 1 到 9 的唯一性和完整性。 而杀手数独则要求每个“ 区”( 虚线环 绕的一 组单元格)中的值必须唯一且总和等于区的右上角所指定的数字。 数独快速 入 门 上篇: 范例一 : 在左边第一个九宫格里,哪格可以放数字, 先看到再第一列和第二列里已经有了数字, 所以很明显了,除了棕色格子之外,上面两列格子已经不能放了。 范例二 : 换个进阶范例来看看, 已知
6、第一列和第二列不能放,但仅就第三列而言,的旁边似乎都可以放的样子, 但再看看被颜色标示的第三行, 看到第三行有之后,就知道棕色格子应该放。 范例三 : 来个更进阶点的,想想左上角第一个九宫格里,哪一格可以放, 再看 先看看前两列,应该不能放, 看被颜色标示的第二行与第三行,又是不能放, 很显然的,就只有棕色格子能放。 范例四 : 再看看这个重要范例,想想左上角第一个九宫格里,哪格可以放, 先看看被颜色标示的第二列, 再看看被颜色标示的第二行, 经过分析后可知要放在这棕色格子。 范例五 : 换个轻松点的范例, 看看第一列,数字有哪些, 显而易见的就是缺。 中篇 范例一 : 看看这个比上篇难的,想
7、想能放在哪里呢, 被颜色标示起来的第一列和第一行已经不能放了, 就左上角的九宫格而言,在红色标示区域似乎是可以摆的, 但在这里而言,似乎无法决定放在两格红色区域的哪一格, 所以,可以先看看邻近的九宫格,发现到棕色格子能放喔,这时候就不用怀 疑马上写下。 范例二 : 看看这个有技术性的,想想能放在哪里, 看到黄色的第一列已经有,所以不能再放了, 就中央的九宫格而言,合理的推论,一定是在第二列中央红色三 格的其中之一了, 既然知道第二列的情况,再考虑黄色区域后, 那么可以先确定右方九宫格的必然放在这棕色格子。 范例三 : 由上篇的概念再进阶,考虑这上面三个九宫格,看看能否决定的 位置, 黄色标示的
8、第三行已先被排除, 就第一个九宫格而言,一定在红色区域, 就黄色标示区域来看,已不能再放了, 这时可以马上先决定右上九宫格里的棕色格子是能放的啦。 范例四 : 看到这左上方九宫格的第一列,就可以马上知道缺了哪两个数字, 是不是已经看出红色格子不是就是了, 但是又看到第二行有,所以很轻松知道左上棕色格子一定是, 接下来就确定在红色格子了。 范例五 : 先看看这第一列, 左上方的九宫格里,第一列绝对有、, 再考虑到第一行黄色区域,看到有和, 这下就可确定绝对放在左上角的棕色格子。 下篇 范例一 : 来看看这个高级进阶例子,可以先把眼光放在第一列和第一行, 看到在黄色区域里都有和,所以此黄色区域已经
9、不能再放和 了, 这时可以考虑到左上九宫格里的红色格子能放和, 再看到第一列和第三列的黄色区域,这黄色区域里已经不能放, 在左上九宫格里,能放的只有红色与棕色格子,但红色格子将会 被和所占据,所以能确定棕色格子必然为。 范例二 : 看看左上方九宫格里,能否由些微线索决定的位置, 首先,看到第一列后先排除、, 又因左上方九宫格里有、 、,再排除这三个数字,这下,在左上方九宫格的第一列,只剩下、可以填,然后,又看到 第一行有和,所以,棕色格子必然不会是和,那么,就只剩下可以填入啦! 下面介绍数独的技巧: 对于数独游戏的解法,通常采用“ 直观法(Direct Elimination Techniqu
10、es)“ 和 “ 候选数法(Candidates Elimination Techniques)“. 直观法(Direct Elimination Techniques), 顾名思义,就是通 过对谜题中现有的数字进行分 析, 继而逐一确定剩余空格中的 数字的方法。 它是最常用并且相 对简单的方法, 对于比较容易的 谜题, 可以快速求解并收到良好 的效果。 但是遇到比较复杂的题 目,直观法(Direct Elimination Techniques) 就 稍显力不从心 了。 候选数法(Candidates Elimination Techniques), 是先 在所有空白的单元格中写上所 有可能
11、出现的数字, 然后通过一 些常用的算法来删减候选数, 最 终获得唯一确定的候选数。 候选 数法(Candidates Elimination Techniques) 被 广泛使用在电脑 生成谜题及解题的实践中, 这不 仅因为它编程相对容易, 而且它 的算法也在不断增加, 使它的解 题效率和能力都得以大力提高。 直观法(Direct Elimination Techniques) 经常在报章杂志上看到的数独谜题,一般就算再难都可以用直观法 来 解决。它不需要象 候选数法 (Candidates Elimination Techniques) 那样在每个空白的单元格中用铅笔填上一大堆候选数。你只要
12、有相对 锐利的眼光和一定的逻辑分析能力,就可以准确地把空余的数字逐个填出来。实际上,直观法 就 是对数独 游戏规则的充分利用。虽然它并不如 候选数法(Candidates Elimination Techniques) 那样强大,但通常要想 体会解决数独谜题的乐趣,使用直观法 却 是不二之选。 直观法(Direct Elimination Techniques) 具 有以下的特点: 1. 轻松上手。 即便是数独新手,在拿到谜题的一刹那,就可以用直观法 来解题了。 2. 无需辅助。 在纸上解题时一般只需要一支钢笔就可以。 因为是通过推理和逻辑分析来确定哪个格 填哪个数,或是哪个数填在哪个格里,所
13、以基本不需要猜测。 3. 容易掌握。 对于直观法(Direct Elimination Techniques) 中应用的各种算法, 可以很快掌握并 应用于实际中。 4. 相对简单。比起候选数法(Candidates Elimination Techniques) ,它的算法相对比较简单,当然能 解决的谜题的复杂度也相对要低。 在直观法(Direct Elimination Techniques) 中,常用的算法包括: 1. 单元唯一法 ( Sole Position Technique ) 2. 单元排除法 ( Basic Elimination Technique ) 3. 区块排除法 (
14、Block Elimination Technique ) 4. 唯一余数法 ( Sole Number Technique ) 5. 组合排除法 ( Combination Elimination Technique) 6. 矩形排除法 ( Rectangle Elimination Technique) 下面先介 绍直观法 的几种算 法 : 单元唯一 法 ( Sole Position Technique ) 这应该算是直观法中最简单的方法了。基本上只需要看谜题,推理分析一概都用不上,这是因为要使用它 所需满足的条件十分明显。同样,也正是因为它简单,所以只能处理很简单的谜题,或是在处理较复
15、杂谜 题的后期才用得上。 我们先来看一个例子: 在上图中,观察行 B ,可以 看到除了B3 外,其他所有的单元格中都已有了数字,根据数独游戏的规则, 即每行,列或区块中不能有重复的数字,则B3中能填 入的数字只能是行 B 中所未 出现过的,也就是数字 3 。所以可以毫不犹豫地在B3中填入 3 。 这就是单元唯 一法在 行中的 应用。这里的单元(Unit, or group),指的是行,列或区块。所以有三种情况: 1. 当某行有 8 个 单元格中已有数字,或 2. 当某列有 8 个 单元格中已有数字,或 3. 当某区块有 8 个单元格中已有数字。 无论是哪种情况,我们都可以很快地在该行,列或区块
16、剩余的空格中填入该单元还未出现过的数字。 下面是单元唯 一法 在列中的 应用: 在第 7 列中, 只有F7未填 入数字,且这一列中数字 8 还未出现过。所以F7 = 8 。 在区块中也是一样: 在起始于D7的区块中,只有E7还未填 入数字,且这个区块中数字 5 还未出现过,所以可以马上在E7 中填入 5 。 单元唯 一法 在 解题初期应用的几率并不高,而在解题后期,随着越来越多的单元格填上了数字,使得应用 这一方法的条件也逐渐得以满足。 单元排除法 ( Basic Elimination Technique ) 单元排 除法 是 直观法中最常用的方法,也是在平常解决数独谜题时使用最频繁的方法。
17、使用得当的话,甚 至可以单独处理中等难度的谜题。 使用单 元 排除法 的目的就是要在某一单元(即行,列或区块)中找到能填入某一数字的唯一位置,换句话 说,就是把单元中其他的空白位置都排除掉。它对应于 候选数法中的隐式唯一法。 那么要如何排除其余的空格呢?当然还是不能忘了游戏规则,即行,列或区块中不能有重复的数字。从另 一个角度来理解,就是 1. 如果某行中已经有了某一数字,则该行中的其他位置不可能再出现这一数字。 2. 如果某列中已经有了某一数字,则该列中的其他位置不可能再出现这一数字。 3. 如果某区块中已经有了某一数字,则该区块中的其他位置不可能再出现这一数字。 单纯理解上面的规则还是不足
18、以解题,但是在实践中这些规则却可以交叉使用。在实际解题过程中,应用 最多也最方便的是对区块的单元排 除法 , 我们可以先看下面这个例子: 对于起始于D1的区块,其未填数字的空格有 6 个之多, 如果不使用单元排除 法 ,是 很难为这一区块填入 任何数字的。这时我们就可以利用行,列及区块的相互关系,即一个单元格既在某一行上,也同时在某一 列上以及某一区块中的这种关系来解题。 观察数字 9 在 谜题中的位置, 可以看到它出现在B2,A4 ,C7,D8,I1和H9 。 而这些位置中, 只 有B2,D8和I1与起始于D1的区块有关联。 因为I1=9 , 它所在的第 1 列上的其他单元格中不可能 再 出
19、现 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 ,
20、在行 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 也使 得F
21、7排除了 填入数字 1 的 可能,因为它们位于同一区块中。 这样,第 7 列 上就只有A7 能填入数字 1 了。 通过上面的示例,可以看到,要对区块使用单元排 除法 ,需要观察与该区块相交的行和列。要对行使用单 元排除 法 ,需 要观察与该行相交的区块和列。要对列使用单元排 除法 ,需要观察与该列相交的区块和行。 在实际解题过程中,行,列和区块之间的关系并不象上面这些图中所示的那么明显,所以需要一定的眼力 和细心观察。一般来说,先看哪个数字在谜题中出现得最多,就从哪个数字开始下手,找到还未填入这个 数字的单元(行,列或区块),利用已填入该数字的单元格与单元之间的关系,看能不能排除一些不可能 填
22、入该数字的位置, 直到剩下唯一的位置。 如果害怕搞不清已经处理过哪些数字的话, 可以从数字 1 开始, 从左上角的区块开始一直检查到右下角的区块, 看能不能在这些区块中应用单元排 除法 。 然后测 试数字 2 , 以此类推。 单元排 除法 是 应用得最多的 直观法,虽然在实践中经常会因为粗心而漏掉很多使用这一方法的机会,但只 要勤加练习,就可以运用自如。 区块排除 法 ( Block Elimination Technique ) 区块排 除法 是 直观法中进阶的技法。虽然它的应用范围不如单元排除法那样广泛,但用它可能找到用单元 排除法 无法找到的解。 有时在遇到困难无法继续时, 只要用一次区
23、块 排除法 , 接下 去解题就会势如破竹了。 区块排 除法 实 际上是利用区块与行或列之间的关系来实现的,这一点与 单元排除法颇为相似。然而,它实 际上是一种模糊排除法,也就是说,它并不象单元排除法 那样利用谜题中现有的确定数字对行,列或区块 进行排除,而是在不确定数字的具体位置的情况下进行排除的。这句话听起来似乎不好理解,让我们先从 一个例子入手,看看区块排 除法 是怎么应 用的。 对于上面这个谜题, 用基本的单元排除法或是单元唯一法 都无法再找到解。 这时可以尝试使用区块排 除法 。 我们先从填入数字最多的区块着手,也就是起始于G4 的区块,该区块中只有H6 和I5为空,且 剩余数 字 1
24、 和 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 了。所 以
25、H6=2 。接 下来,当然毫无疑问,利用单元唯一法,在I5填入数 字 1 。 先小结一下上面的求解方法:解题时,实际上是在对目标区块(主区块)有影响的区块(辅助区块)中应 用单元单元排除法,使辅助区块满足某些条件并能参与对主区块的数字排除。 实际应用中,可能出现下面四种情况: 1. 当某数字在某个区块中可填入的位置正好都在同一行上,因为该区块中必须要有该数字,所以这 一行中不在该区块内的单元格上将不能再出现该数字。 2. 当某数字在某个区块中可填入的位置正好都在同一列上,因为该区块中必须要有该数字,所以这 一列中不在该区块内的单元格上将不能再出现该数字。 3. 当某数字在某行中可填入的位置正好
26、都在同一区块上,因为该行中必须要有该数字,所以该区块 中不在该行内的单元格上将不能再出现该数字。 4. 当某数字在某列中可填入的位置正好都在同一区块上,因为该列中必须要有该数字,所以该区块 中不在该列内的单元格上将不能再出现该数字。 其中 1 ,2 两种 情况相对常见,也比较容易判断。上面的示例就是第 1 种情况。下面我们会看到第 2 种情 况的例子: 虽然在起始于A7的区块中, 未填入数字的空单元格多达 4 个, 但我们还是可以轻松地确定数字 5 的位 置。 这是因为在起始于G7的区 块中,我们欣喜地发现数字 5 可能出现的位置正好都在第 8 列上,这时 5 的确 切位置已经不重要了,因为它
27、已经满足了上面介绍的第 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。
28、碰巧 的是,这两个单元格都在起始于A4的区 块中,这时已经满足了上述情况 3 的条件 。利用单 元排除法的区块排除, 则行 C 上的C4和C5都不能再填入 3 ; 再加上F3的列排除的共同努力, 最终确定 数字 3 在行 C 上的唯一位置就是C1。 第 4 种情况的 例子如下: 在这个示例中,只是使用单元排除法和单元唯一法到这一步就继续不下去了。要想求得数字 8 在第 6 列的 位置,就必须要借助区块排除法。先看第 4 列,通过位于C3和I8的数 字 8 的行排除 ,使 8 在第 4 列可 能填入的位置只剩下D4和F4 ,而这两个单元格正好都在起始于D4的区块中。因为第 4 列不能 没有数 字
29、 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,见 下图: 利用区
30、 块 排除法 ,在起始于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也 排除掉。最后,我们就可以很肯定地在
31、A1中填入数字 3 了。 这个例子同时使用了多个辅助区块同时参与排除。在实际使用中虽然这种情况并不常见,但却也不少见。 关键在于如何能正确识别并恰当应用区块 排除法 。相信 通过大量的练习并勤于分析思考,这种方法就可以 运用自如,得心应手。 下面是其他的一些例子,可以帮助更好地理解并掌握这种技法: 唯一余数 法 ( Sole Number Technique ) 唯一余 数法 是 直观法中较不常用的方法。虽然它很容易被理解,所以说明这个方法不需要很大篇辐,然而 在实践中,却不易看出能够使用这个方法的条件是否得以满足,从而使这个方法的应用受到限制。 与单元唯一法 相比,唯一余 数法 是确定某 个
32、单元格能填什么数的方法,而 单元唯一法是确定某个数能填在 哪个单元格的方法。另外,应用单元唯一法的条件十分简单,几乎一目了然。 与候选数法 相比,唯 一 余数法 相当于显式唯一法。虽然显式唯一法是候选数法中最简单且应用最容易的方 法,但在 直观法中却正好相反。 先看一个例子: 对于单元格G9应该填入什么数字,就算你把前面介绍的所有直观技法都用上,也不得而知。然而,我们 通过观察它所在的行,列和区块,可以发现除了数字 2 以外,1 到 9 中其他的数字都出现了,其中行 G 中 包含了 7 ,6 ,9 ,5 ,3 和 8,第 9 列中包含 了数字 5 ,8 ,7 和 1 , 起始于G7的单元格 中
33、包含了 3 ,8 ,4 , 7 ,5 和 1 。这 样,如果G9 不填入数字 2 ,就一定会违反游戏“ 行,列或区块不能出现重复数字” 的规则。 所以G9中的 数字一定是 2 总结一下,就是如果某一单元格所在的行,列及区块中共出现了 8 个 不同的数字,那么该单元格可以确定 地填入还未出现过的数字。 怎么样,很简单吧,但在实践中却不那么容易识别。看下面的谜题: 你能看出来对哪个单元格应用唯一余 数法 吗? 还有这个谜题: 答案分别是E6=9 和I7=9 。 一般来说,只有在使用基本的排除方法都失效的情况下,才试着使用这个方法来解题。 组合排除 法 ( Combination Eliminati
34、on Technique) 组合排 除法 和 区块排除法一样,都是直观法中进阶的技法,但它的应用范围要更小一点。一般情况下,基 本没有机会用到这种方法解题,所以要找到相应的例子也都很困难。当然,如果你希望优先以这个技法来 解题的话,还是能碰到很多能符合使用组合排除法条件的情况。 组合排 除法 , 顾名思义,要考虑到某种组合。这里的组合既包括区块与区块的组合,也包括单元格与单元 格的组合,利用组合的关联与排斥的关系而进行某种排除。它也是一种模糊排除法,同样是在不确定数字 的具体位置的情况下进行排除的。下面先看一个例子: 对于上面这个谜题,你能确定数字 6 在起 始于G4的区 块中的位置吗? 要想
35、获得正确的答案初看起来有些困难。因为虽然在G9和H3已经存 在了两个 6 ,但是利用它们只能行 排除区块中的G4和H6两个 单元格, 还是无法确定 6 到 底是在I4还是 在I5中。 这时 候, 组合排除 法 就 派上用场了。 现在撇开起始于G4的区块 ,先看它上面的两个区块,即起始于A4 和D4的区块。这几个区块的共同特 点是占有同样的几列,也就是第 4 列至第 6 列,因此它们之间的数字会相互直接影响。 对于起始于A4的区块,利用A1 处已有的数字 6 进行行排 除,可以得到这个区块中可能填入 6 的位 置只 剩下两个:B5和C6。 对于 起始于D4的区块, 利用E7处已有的数字 6 进行
36、行排除, 可以得到这个区 块中可能填入 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 。 决不会再出现其他的情况。但无论 是其中哪一种情况
37、, 第 5 列 和第 6 列都会 有确定的 6 出 现在这两个区块中, 也就是说, 第 5 列和 第 6 列的 其他位置不可能再出现数字 6 。这样,原本无法肯定的 6 在起始于G4 区块中的位置,一下子就变得明确 了。 利用起始于A4和D4的区块 对起始于G4 的区块进行列排除, 可以把I5排除掉, 这样, 就只剩下I4可 以填入 6 了。 小结一下,组合排除法的要满足的条件如下: 1. 如果在横向并行的两个区块中,某个数字可能填入的位置正好都分别占据相同的两行,则这两行 可以被用来对横向并行的另一区块做行排除。 2. 如果在纵向并行的两个区块中,某个数字可能填入的位置正好都分别占据相同的两
38、列,则这两列 可以被用来对纵向并行的另一区块做列排除。 让我们再看一个例子: 要想确定数字 1 在起始于D4 的单元格中的位置,我们将设法借助于其横向上相邻两个区块的帮助。 利用I2的列排 除, 我们可以把起始于D1的区块中的E2和F2排除掉 , 这样, 这个区块中能填入 1 的位 置剩下D1,D3 和E1。 利用H7的列 排除,可以把起始于D7的区块中的E7 和F7排除掉 ,再利用 A9的列排除, 可以把这个区块中E9和F9 排除掉, 这样, 这个区块中能填入 1 的位置 只剩下D8和E8 。 虽然在起始于D1的区块中, 能填入 1 的位 置多达 3 个, 但是它们正好只分布在行 D 和行
39、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 。 下面是其他一些使用组合排 除法 的例子: 在实践中,组合排除 法 的实 际应用机会不如 区块排除法多。但是,掌握这一技法无疑可以大大提高求解谜
40、题的灵活性,从而增加解题的乐趣。 矩形排除 法 ( Rectangle Elimination Technique) 矩形排 除法 虽 然浅显易懂,但一般在实际解题的时候应用得却比较少。这是因为即使谜题中存在满足使用 这一方法的情况,也很难直接看出来。然而,相对 组合排除法而言,在解题过程中倒是能有更多的机会用 上矩形排 除法 。下面先看一个例子: 对于这个谜题,如果不用矩形排除 法 是无 法继续下去的。我们将通过讲解这种技法,从而找到数字 8 在起 始于G1的区 块中的位置。乍看之下,好象一筹莫展。因为B2和E3 上的 8 只能列 排除左下角这个区块 中的G2, H2 ,G3和I3 这 4
41、个单元格 ,这时仍剩下两个单元格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和C
42、9一定 不能是 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 一定
43、在G1上。 总结一下,使用矩形排 除法 的条件如下: 1. 如果一个数字在某两行中能填入的位置正好在同样的两列中,则这两列的其他的单元格中将不可 能再出现这个数字; 2. 如果一个数字在某两列中能填入的位置正好在同样的两行中,则这两行的其他的单元格中将不可 能再出现这个数字。 让我们再来看一个例子: 做到这一步时,不用矩形排除法的话恐怕是走投无路了。这次还是要在起始于G1 的区块中找到数字 4 的 位置。但我们无法确定 4 究 竟在G2还是G3 呢? 先要找找看有没有满足矩形排除法条件的情况存在。观察行 B ,在这 一行中,由于C5的区块排除,B4 和B5都不能 为 4 ,再加上H8 列排除了
44、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 了。 下面是应用矩形排除法的其他一些例子,希望可以帮助大家快速掌握这种方法: 矩形排 除法 可 以说是 直观法中最困难的技法,因为当前的谜题即使满
45、足应用这一方法的条件,也实在太难 发现了。一般情况下,尽量先使用其他相对简单的直观法 。如果最后连矩形排 除法 都用上还是无法解题, 你可能就需要尝试候 选数删减法了。 候选数法(Candidates Elimination Techniques) 对于解决数独谜题,最常使用的方法就是直观法和候选 数法 。在谜题 相对简单时, 直观法可以取得相当好 的效果。但是如果谜题比较复杂,直观法 的效果就十分有限,即使通过试探性填数也不一定能够解题,而 这时候选数 法 却可以很好地发挥作用。在对数独谜题求解的电脑程序的设计上,候选数法 也因为 高效易实 现而被广泛应用。 如果用候选数 法 来解题,必须首
46、先准备一张如下图所示的候选数栅格表: 初始化时, 每个单元格中都包含了 1 至 9 所 有的数字, 它表示该单元格中在解题时还可以选择填入的数字。 很明显,不在候选数中的数字是不能够填入该单元格中的。如果某一单元格中已填入一个确定的数字,则 根据数独游戏的规则,即该单元格所在行,列及区块中都不能再出现这个数字,则该数字应从这些单元格 中的候选数字中去除。对于下面的这个谜题: 每填入一个数字时,都要将该单元格中的候选数全部删除,同时扫描其所在行,列和区块,看它们所覆盖 的单元格上的候选数中有无该数字: 如果有,就把该数字从候选数中删除: 同理,填入谜题中其他的初始数字,并删除这些数字各自所在行,
47、列和区块候选数中的该数字,可以得到 下面的候选数栅格表: 注意,填入数字的顺序与最终的候选数栅格表无关。 这时,我们发现每个单元格中的候选数已经比最初少了许多,真是一个令人兴奋的开始。随后,我们将辅 以各种候选数删减技巧,进一步减少候选数的个数,当某单元格中只剩下唯一的候选数时,该单元格就得 到了它的唯一解。细心的朋友已经发现,在上面的候选数栅格表中,单元格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