添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

作者:扬子活力论坛 泥瓦匠 整理:隱讀書生

数独这个数字解谜游戏,完全不必要用到算术!会用到的只是推理与逻辑。解题方法分两大类:直观法和候选数法。

直观法就是不需要任何辅助工具,从接到数独谜题的那一刻起就可以立即开始解题。绝不猜测。数独直观法解题技巧主要有:唯一解法、基础摒除法、区块摒除法、唯余解法、矩形摒除法、单元摒除法 , 余数测试法。

候选数法就是解数独题目需先建立候选数列表,根据各种条件,逐步安全的清除每个宫格候选数的不可能取值的候选数,从而达到解题的目的。

使用候选数法一般能解比较复杂的数独题目,但是候选数法的使用没用直观法那么直接,需要先建立一个候选数列表的准备过程。所以实际使用时可以先利用直观法进行解题,到无法用直观法解题时再使用候选数方法解题。

候选数法解题的过程就是逐渐排除不合适的候选数的过程,所以在进行候选数删除的时候一定要小心,确定安全的删除不合适的候选数,否则,很多时候只有重新做题了。有了计算机软件的帮助,使得候选数表的维护变得轻松起来。

数独候选数法解题技巧主要有:唯一候选数法、隐性唯一候选数法、区块删减法、数对删减法、隐性数对删减法、三链数删减法、隐性三链数删减法、矩形顶点删减法、三链列删减法、关键数删减法、关连数删减法。

一、直观法:

1 、唯一解法:

当某行已填数字的宫格达到 8 个,那么该行剩余宫格能填的数字就只剩下那个还没出现过的数字了。成为行唯一解。

当某列已填数字的宫格达到 8 个,那么该列剩余宫格能填的数字就只剩下那个还没出现过的数字了。成为列唯一解。

当某九宫格已填数字的宫格达到 8 个,那么该九宫格剩余宫格能填的数字就只剩下那个还没出现过的数字了。成为九宫格唯一解。

下面是例题:

A 行已经添入 8 个数字, A 行只有数字 3 没有出现过,所以 A9=3 ,这是行唯一解。

1 列已经添入 8 个数字,第 1 列只有数字 5 没有出现过,所以 E1=5 ,这是列唯一解。

A8 所在九宫格区域已经添入 8 个数字,只有数字 9 没有出现过,所以 A8=9 ,这是九宫格唯一解。

2 、基础摒除法

基础摒除法就是利用 1 9 的数字在每一行、每一列、每一个九宫格都只能出现一次的规则进行解题的方法。基础摒除法可以分为行摒除、列摒除、九宫格摒除。

实际寻找解的过程为:

寻找九宫格摒除解:找到了某数在某一个九宫格可填入的位置只余一个的情形;意即找到了 该数在该九宫格中的填入位置。

寻找列摒除解:找到了某数在某列可填入的位置只余一个的情形;意即找到了该数在该列中的填入位置。

寻找行摒除解:找到了某数在某行可填入的位置只余一个的情形;意即找到了该数在该行中的填入位置。

利用基础摒除法解题的过程就是依次从数字 1 9 在行、列、九宫格寻找能放入该数唯一的一个位置。需要综合用到行摒除、列摒除、九宫格摒除的方法。

看能用基础摒除法确定B2、C8、E7、F6、I5的数字吗?

题目如下:

A4=9 ,则A行其它格排除9; G1=9 ,第 1 列排除数字9; D3=9 ,第 3 列排除数字9。

由基础摒除法,第 A1 所在的九宫格内9只有一个唯一的位置,即确定 B2=9

A4=9 ,则 4 列其它格排除9; G1=9 ,第 G 行排除数字9; H9=9 ,第 H 行排除数字9。

由基础摒除法,第 G4 所在的九宫格内9只有一个唯一的位置,即确定 I5=9

A4=9 ,则 4 列其它格排除9; D3=9 ,第 D 行排除数字9; I5=9 ,第 5 列排除数字9。

由基础摒除法,第 D4 所在的九宫格内9只有一个唯一的位置,即确定 F6=9

A4=9 ,则 A 行其它格排除9; B2=9 ,第 B 行排除数字9; H9=9 ,第 9 列排除数字9。

由基础摒除法,第 A7 所在的九宫格内9只有一个唯一的位置,即确定 C8=9

C8=9 ,则 8 列其它格排除9; D3=9 ,第 D 行排除数字9; F6=9 ,第 F 行排除数字9; H9=9 ,第 9 列排除数字9。

由基础摒除法,第 D7 所在的九宫格内9只有一个唯一的位置,即确定 E7=9

3 、区块摒除法

区块摒除法是基础摒除法的提升方法,是直观法中使用频率最高的方法之一。

所谓区块,就是将行分成 3 个三个相连的小方块构成,列也是分成 3 个三个相连的小方块构成。九宫格同样被看成由 3 个三个相连的小方块构成,如下面示意图:

区块摒除法的核心思想如下面解释 ( 以行为例 ) ,对于在列也是相同的道理

假如 (G1~G3) 黄色区域区块其中之一是数字 9

则, (H4~H6) 蓝色区域可能含有数字 9

否则 (I4~I6) 绿色区域含有数字 9

假定我们已确定 (G1~G3) 黄色区域区块其中之一是数字 9

(H4~H6) 蓝色区域含有数字 9

则:在 (I7~I9) 绿色区域一定含有数字 9 。如果再通过其它方法确定 (I7~I9) 绿色区域中某两个宫格不能为数字 9 ,则就能确定数字 9 (I7~I9) 区块的具体位置。

下面举一些例子

能使用区块摒除法确定 F6 的数字吗 ?

D2=2 ,则 E1~E3 蓝色区块,或 F1~F2 绿色区块必包含数字 2

又有 B1=2 ,利用列摒除法, E1 F1 不能为数字 1 ,有 F2 F3 已填有数字,所以, E2~E3 蓝色区块必有数字 2

由上面得出黄色区块 , 蓝色区块包含数字 2, 这是典型的区块摒除法 , 得到绿色区块必包含数字 2

G4=2,F5 已添入数字 , 所以 F6=2

4 、唯余解法

唯余解法就是某宫格可以添入的数已经排除了 8 个,那么这个宫格的数字就只能添入那个没有出现的数字。

唯余解法道理非常简单,但在实际使用是比较困难,要注意识别。 A5=?

其实这就是唯余解法的原理,很简单吧。但是实际使用时就不会容易发现了。

能使用唯余解法确定 B7 的值吗 ?

呵呵,等于 8

能确定 E9 A9 B9 C9 的值吗 ?

由区块摒除法可以得出 E9=9 。在区块摒除法没有举这个例子,这里补充。

由唯余解法, C9=2

同样,可得出 B9=4 A9=8

5 、矩形摒除法

矩形摒除法是比较高级的排除方法,虽然矩形摒除法的原理非常简单,在实际使用时比较难于观察出来。

矩形摒除法的原理如下:

如上图,如果在第 3 列,我们确定数字 9 只能在 B3 H3 出现。在第 7 列,数字 9 只能在 B7 H7 出现。则 B3 H3 B7 H7 构成矩形,符合矩形摒除法的条件。

由上,可以得出数字 "9" 仅可能出现在 (B3 H7) 上,或者出现在 (B7 H3)

无论出现上面的那一种情况,我们都可以推断出 B 行, H 行的红色区域都不能再为数字 9 了。

下面举一个使用矩形摒除法的例子

C7=3 ,我们可以判断在第 3 列,数字 3 只能出现在 A3 H3

又第 6 列,数字 3 只能出现在 A6 H6

A3 H3 A6 H6 形成矩形符合矩形摒除法的条件

由矩形摒除法得到 H8 不可能是 3 ,又根据 C7=3 ,所以 G9=3

6 、单元摒除法

单元摒除法是比较基本的排除方法 , 下面举例解释

能确定 A8 的数字吗 ?

D5=7 ,得出 D8 不等于 7

H9=7 ,得出 G8 H8 I8 均不等于 7

显然 A8=7

7 、余数测试法

所谓余数测试法就是在某行或列,九宫格所填数字比较多,剩余 2 个或 3 个时,在剩余宫格添入值进行测试的解题方法。

我们看 B 行, B3 可能添入的数为 5 或者 6 ,我们从 5 开始测试。

我们在 B3 添入 5 进行测试,得到左图,没有得出出错的推断,所以 B3=5 可能是正确的判断,如果能判断出 B3<>6 ,则才能肯定 B3=5

所以下面我们还需要用 B3=6 进行测试

B3 添入 6 ,推出 B8=5

观察 C 行, C7 C8 C9 必含有数字 5

证明 B3=6 是错误的。从而得出 B3=5

二、候选数法:

1 、唯一候选数法

候选数法解题的过程就是逐渐排除不合适的候选数的过程,当某个宫格的候选数排除到只有一个数的时候,那么这个数就是该宫格的唯一的一个候选数,这个候选数就是解了。

我们可以排除 D3 12356789 的可能,经过候选数的安全删除后, D3 的候选数变为 "4" 这个唯一候选数了。

2 、隐性唯一候选数法

当某个数字在某一列各宫格的候选数中只出现一次时,那么这个数字就是这一列的唯一候选数了。这个宫格的值就可以确定为该数字。

这时因为,按照数独游戏的规则要求每一列都应该包含数字 1 9 ,而其它宫格的候选数都不含有该数,则该数不可能出现在其它的宫格,那么就只能出现在这个宫格了。

对于唯一候选数出现行,九宫格的情况,处理方法完全相同

这是制作好的一张候选数表,注意观察 B5 B9 D1

可以看出在第 1 列,数字 9 只在 D1 出现。

在第 5 列,数字 3 只在 B2 出现。

B9 所处的九宫格里,数字 9 只有在 B9 出现。

所以 “9” 是第 1 列的隐形唯一候选数。

“3” 是第 5 列的隐形唯一候选数。

“9” A7 九宫格的隐形唯一候选数。

所以确定 D1 3 B5 3 B9 9

3 、三链数删减法

找出某一列、某一行或某一个九宫格中的某三个宫格候选数中,相异的数字不超过 3 个的情形,进而将这 3 个数字自其它宫格的候选数中删减掉的方法就叫做三链数删减法。

三链数删减法的原理如下面图示

H 行, H2 H5 H7 的候选数( 12 ), (23) (13) ,构成三链数,那么 123 这三个数在 H 行将只能出现在 H2 H5 H7 ,那么本行其它宫格就可以删除这 3 个候选数了。这是三链数发生在行的情况。

G7 所在九宫格, G7 H8 I9 的候选数( 12 ), (23) (13) ,构成三链数,那么 123 这三个数在这个九宫格将只能出现在 G7 H8 I9 ,那么本九宫格其它宫格就可以删除这 3 个候选数了。这是三链数发生在九宫格的情况。

三链数是数对的扩展,我们在对上面的三链数进行扩展,得到右边的特殊的三链数,只要保证在 3 个宫格内,其包含的候选数也为 3 个,就都符合我们的要求,比如 (123 123 123) (12 12 123) 都符合要求。

我们进一步再扩充,发现只要在 N 个宫格内,其包含的候选数也恰为 N 个,那么处理和三链数是相同的道理,这样就形成了四链数,比如 (12 23 34 14) (123 123 14 1234) 等。

甚至可以扩充到五链数,七链数(虽然在实际解题中作用不大了)。

平时我们用到最多的就是三链数,四链数了。

A4 所在九宫格,我们看到 B4~B6 ,形成三链数,则本九宫格其它宫格就可以去除候选数 "2" "7" "9" ,这样就得到 C6=4

同上面完全相同的一副图,在 A 行, A7~A9 形成由 179 构成的三链数,排除本行其它宫格的候选数 179 后得到 A3=3

4 、隐性三链数删减法

隐性三链数是从隐性数对发展而来的。

在某行,存在三个数字出现在相同的宫格内,在本行的其它宫格均不包含这三个数字,我们称这个数对是隐形三链数。那么这三个宫格的候选数中的其它数字都可以排除。

当隐形三链数出现在列,九宫格,处理方法是完全相同的。

我们进一步扩充,在某行(列,九宫格),存在 N 个数字出现在相同的宫格内,在本行的其它宫格均不包含这 N 个数字,我们称这个数对是隐形 N 链数。那么这 N 个宫格的候选数中的其它数字都可以排除

在中间九宫格,候选数 “2” “5” “9” 仅出现在 E4 E6 F4 ,形成隐形三链数,所以在 E4 E6 F4 ,可以排除其它候选数,得到 F4=9

5 、矩形顶点删减法

矩形顶点删减法和直观法讲到的矩形摒除法分析方法是一样的。矩形顶点删减法在识别时比较不容易找到,所以最好先使用其它的方法。

如上图,如果在第 3 列,候选数 “9” 只能在 B3 H3 出现。在第 7 列,候选数 “9” 只能在 B7 H7 出现。

B3 H3 B7 H7 构成矩形,符合矩形顶点删减法的条件。

由上,可以得出数字 “9” 仅可能出现在 (B3 H7) 上,或者出现在 (B7 H3)

无论出现上面的那一种情况,我们都可以推断出 B 行, H 行的红色区域都不能再为数字 9 了。可以将红色的宫格的候选数中去除数字 “9”

举例说明如下:

在第 3 列,数字 “3” 仅在 A3 H3 出现和第 6 列,数字 “3” 仅在 A6 H6 出现, A3 H3 A6 H6 构成矩形,符合矩形顶点删减法要求,

则红色宫格应排除候选数 “3”

6 、三链列删减法

三链列删减法是矩形顶点删减法的扩展,如果不清除矩形顶点删减法,可以参考矩形顶点删减法,以便于更容易理解本节内容。

利用 找出某个数字在某三列仅出现在相同三行的情形,进而将该数字自这三行其他宫格候选数中删减掉 ;或 找出某个数字在某三行仅出现在相同三列的情形,进而将该数字自这三列其他宫格候选数中删减掉 的方法 就叫做三链列删减法。

如果数字 “1” 可能出现在 B 行、 E 行、 G 行的黄色宫格,则符合 某个数字在某三列仅出现在相同三行的情形 ,符合三链列删减法的要求。

则红色宫格均不包含候选数 “1”

这是前图的一个变形。其中一行的 “1” 只能放在这一行的两个位置。 处理和上图一样,红色宫格均可以排除候选数 “1”

举例说明:

数字 "6" 在第 2 列,第 6 列,第 8 列。均出现在 A B,I 行。其中在第 6 列仅出现 B,I 行,仍然符合三链列删减法的要求。

则红色宫格均可以排除候选数 "6"

7 、关键数删减法

在进入到解题后期,利用前面讲到的唯一候选数法、隐性唯一候选数法、 区块删减法、数对删减法、隐性数对删减法、 三链数删减法、隐性三链数删减法、矩形顶点删减法、三链列删减法都无法有进展的时候,可以考虑使用关键数删减法。关键数删减法就是在后期找到一个数,这个数在行(或列,九宫格)仅出现两次的数字。我们假定这个数在其中一个宫格类,继续求解,如果发生错误,则确定我们的假设错误。如果继续求解仍然出现困难,不妨假设这个数在另外一个宫格,看能不能得到错误。这就是关键数删减法。

关键数删减法的本质是让我们一个个去测试,逐渐排除不可能的候选数,从而求解的过程。

这种解法就暂时不举例子了