zoukankan      html  css  js  c++  java
  • 数独解题方法大全

    数独解题方法大全

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

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

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

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

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

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

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

    一、直观法:

    1、唯一解法:

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

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

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

      下面是例题:

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

    clip_image001

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

    clip_image002

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

    clip_image003

    2、基础摒除法

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

    实际寻找解的过程为:

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

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

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

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

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

    题目如下:

    clip_image004

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

    见下图

    clip_image005

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

    见下图

    clip_image006

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

    见下图

    clip_image007

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

    见下图

    clip_image008

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

    见下图

    clip_image009

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

    见下图

    clip_image010

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

    见下图

    clip_image011

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

    见下图

    clip_image012

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

    见下图

    clip_image013

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

    3、区块摒除法

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

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

    clip_image014   clip_image015   clip_image016   clip_image017 

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

    clip_image018

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

    clip_image019

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

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

    clip_image020

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

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

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

    下面举一些例子

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

    clip_image021

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

    clip_image022

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

    clip_image023

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

    clip_image024

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

    clip_image025

    4、唯余解法

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

    clip_image026

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

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

    clip_image027

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

    呵呵,等于8

    clip_image028

    能确定E9A9B9C9的值吗?

    clip_image029

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

    clip_image030

    由唯余解法,C9=2

    clip_image031

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

    5、矩形摒除法

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

    矩形摒除法的原理如下:

    clip_image032

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

    clip_image033

    由上,可以得出数字"9"仅可能出现在 (B3H7)上,或者出现在 (B7H3)

    clip_image034

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

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

    clip_image035        clip_image036

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

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

    A3H3A6H6形成矩形符合矩形摒除法的条件

    clip_image037

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

    6、单元摒除法

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

    clip_image038

    能确定A8的数字吗?

    clip_image039

    D5=7,得出D8不等于7

    H9=7,得出G8H8I8均不等于7

    显然A8=7

    7、余数测试法

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

    clip_image040

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

    clip_image041

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

    clip_image042

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

    B3添入6,推出B8=5

    clip_image043

    观察C行,C7C8C9必含有数字5

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

    二、候选数法:

    1、唯一候选数法

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

    clip_image044

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

    2、隐性唯一候选数法

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

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

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

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

    clip_image045  clip_image046

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

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

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

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

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

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

    所以确定D13B53B99

    3、三链数删减法

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

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

    clip_image047

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

    clip_image048

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

    clip_image049

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

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

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

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

    clip_image050

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

    clip_image051

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

    4、隐性三链数删减法

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

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

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

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

    clip_image052

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

    5、矩形顶点删减法

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

    clip_image053

    如上图,如果在第3列,候选数“9”只能在B3H3出现。在第7列,候选数“9”只能在B7H7出现。

    B3H3B7H7构成矩形,符合矩形顶点删减法的条件。

    clip_image054

    由上,可以得出数字“9”仅可能出现在(B3H7)上,或者出现在(B7H3)

    clip_image034

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

    举例说明如下:

    clip_image055

    在第3列,数字“3”仅在A3H3出现和第6列,数字“3”仅在A6H6出现,A3H3A6H6构成矩形,符合矩形顶点删减法要求,

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

    6、三链列删减法

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

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

    clip_image056

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

    clip_image057

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

    clip_image058

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

    举例说明:

    clip_image059

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

    clip_image060

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

    7、关键数删减法

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

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

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

  • 相关阅读:
    自学python:python学习笔记之Ubuntu 16.04网络的配置
    Python 3 中字符串和 bytes 的区别
    Python map学习笔记
    Python lambda 知识点
    Eclipse中Activiti插件的安装
    Activiti简介
    Jquery ajax回调函数不执行
    Spring Boot安装及入门实现
    mysql给root开启远程访问权限
    linux下安装Tomcat
  • 原文地址:https://www.cnblogs.com/quanweiru/p/2793156.html
Copyright © 2011-2022 走看看