数独解题方法大全

article/2025/10/2 3:55:29

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

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

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

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

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

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

一、直观法:

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、关键数删减法

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

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

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

 


http://chatgpt.dhexx.cn/article/sJVYtyaT.shtml

相关文章

37.解数独

37. 解数独&#xff08;难度&#xff1a;困难&#xff09; 题目链接&#xff1a;https://leetcode-cn.com/problems/sudoku-solver/ 编写一个程序&#xff0c;通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数…

安装搜狗输入法成功,每次都折腾,记录一下这次的成功经验。

1&#xff1a;卸载fcitx sudo apt-get --purge fcitx* 2&#xff1a;清理系统内的无用的软件包 sudo apt-get --purge autoremove 3&#xff1a;到搜狗官网下载搜狗拼音输入法&#xff0c;选择你系统对应的软件包&#xff0c;我系统是64位的&#xff0c;所以我选择了amd64的 ht…

Ubuntu16.04 python2.7升级python3.5

原文地址&#xff1a;https://www.cnblogs.com/wmr95/p/7637077.html Ubuntu16.04 python2.7升级python3.5 正常情况下&#xff0c;你安装好ubuntu16.04版本之后&#xff0c;系统会自带 python2.7版本&#xff0c;如果需要下载新版本的python3.5&#xff0c;就需要进行更新。下…

(转)解决Ubuntu2.6.31-20内核更新问题:Unable to mount root fs on unknown-block(x,x)

原文章&#xff1a;http://hi.baidu.com/%D2%BB%B5%E3%C7%E7/blog/item/d3b0df30da10a115ebc4afa3.html Ubuntu2.6.31-20内核更新问题&#xff1a;Unable to mount root fs on unknown-block(x,x) WUBI装的ubuntu。在更新了最信的内核 2.6.31-20&#xff0c;启动时出现提示&a…

Git客户端的简单使用(注册-gt;应用)

参考文档&#xff1a; Ubuntu下git安装与使用&#xff1a;https://jingyan.baidu.com/article/dca1fa6f43c965f1a540524d.html Ubuntu下使用SSH KEY&#xff1a;https://jingyan.baidu.com/article/5bbb5a1bff545613eba17915.html 1. 通过apt源安装git命令行工具 这里不建…

windows10下的Ubuntu18.04的双系统的安装

windows下装Ubuntu18.04的双系统作为菜鸟&#xff0c;照着大神们的教程装了几遍&#xff0c;给大家分享一下流程。&#xff08;默认装好Windows10&#xff09; 1.【Win10上安装的软件】可在Win10上提前下载安装EasyBCD软件&#xff0c;用于之后开机时的双系统切换&#xff1b;…

[Linux 基础] -- Linux DRM (二) 基本概念和特性 - Rockchip

一、楔子 上篇文章中我们有讲过 DRM 是 Linux 下的图形渲染架构&#xff0c;用来管理显示输出、图层合成与更新、内存管理、分辨率设置等等功能的一套显示管理框架。应用程序可以直接操纵 drm 的 ioctl 或者是用 framebuffer 提供的接口进行显示相关操作。后来大家觉得这样太 …

ubuntu mysql5.7配置_MySQL5.7在Ubuntu上的安装、配置与使用

环境&#xff1a;html Ubuntu 1804 64位 python 待安装&#xff1a;MySQL5.7版本mysql 1、安装 一、下载mysql-apt的配置包&#xff0c;并安装 或者下载社区版本mysql5.7 https://www.cnblogs.com/metianzing/p/9050204.html sql 在安装的过程当中&#xff0c;会要求选择mysql版…

master节点怎么安装mysql软件_Windows下搭建MySQL Master Slave

转&#xff1a;http://www.cnblogs.com/gaizai/p/3248207.html http://www.cnblogs.com/gaizai/archive/2013/03/15/2961868.html MySQL表数据迁移自动化 http://www.cnblogs.com/gaizai/archive/2012/10/23/2735556.html Ubuntu10下MySQL搭建Master Slave 一、背景 服务器上…

虚拟机安装ubuntu20服务器版,【Linux】 Windows安装VMware虚拟机安装Ubuntu系统20.04LTS图文教程...

这是一期VMware虚拟机安装Ubuntu系统的教程&#xff0c;用虚拟机是由于它安全性&#xff0c;可靠性高&#xff01;测东西坏了重装一下又能继续了&#xff0c;能够不断的循环使用&#xff0c;方便快捷不会影响到你的电脑&#xff01;那么直接开始吧&#xff01;&#xff01;html…

Docker 实践指南(一)下载、配置及应用等常见命令

一、下载及启动&#xff1a; 1、docker 启动 2、docker 删除 ubuntu中docker彻底卸载 - 饭米雪 - 博客园网上很多博主提供的命令行&#xff0c;其实并不能完全卸载docker。。。 #删除某软件及其安装时自动安装的所有包 sudo apt-get autoremove docker docker-ce docker-htt…

2022 rog 枪神6p Ubuntu20.04 AX211无线网卡 驱动无效

新买的电脑rog 枪神6p&#xff0c;装Ubuntu20.04.4&#xff0c;无线网卡是AX211 装20.04.1失败&#xff0c;装20.04.4成功 系统装好以后&#xff0c;没wifi驱动&#xff0c;右上角没有wifi 这是因为目前20.04 lts默认的内核是5.13&#xff0c;而根据https://wireless.wiki.k…

cmd文件闪退问题追踪办法

在日常中&#xff0c;经常会遇到一些.cmd文件双击打开的时候闪退的问题&#xff0c;这个时候我们看不到日志也无从看报错信息&#xff0c;因此很难分析问题&#xff0c;这个时候有个小技巧&#xff0c;找一个编辑器&#xff0c;如&#xff1a;Edit等&#xff0c;对cmd文件进行编…

cmd文件和bat文件的区别+一个的bat脚本+bat基础知识

一&#xff1a;cmd文件和bat文件的区别 cmd和bat文件都是批处理文件&#xff0c;都是靠cmd.exe解析执行&#xff0c;两者本质上没有区别&#xff0c;都是简单的文本编码方式&#xff0c;都可以用记事本创建、编辑和查看。两者所用的命令行代码也是共用的&#xff0c;只是cmd文…

cmd批量文件重命名

rename *.* asflh???.*cd 进入目录文件夹&#xff0c;对象是当前目录下的文件&#xff0c; . 表示所有格式的所有文件&#xff0c; asflh 添加asflh前缀&#xff0c;写在后面添加后缀 通配符*表示任意多个字符&#xff0c;?表示一个字符 -----------------------更新 fo…

CMD如何直接运行文件

CMD如何直接运行文件 方式一(简单粗暴):直接将写好的代码文件改后缀为.bat,然后双击运行方式二:打开cmd,然后将要执行的文件丢到cmd里,按回车就OK了方式三:运行某种类型的文件,使用start关键字文件的路径,或直接省略start C:\Users\DEll>start C:\Users\DEll\Desktop\conne…

windows cmd 查看文件目录树

windows cmd 查看文件目录树 tree /?&#xff1a;命令提示 tree&#xff1a;不输入任何参数&#xff0c;输出一棵目录树 不显示文件&#xff0c;只显示目录&#xff1b; D:. ├─ets │ ├─FormAbility │ ├─MainAbility │ │ └─pages │ ├─model │ └─Sec…

CMD文件详解与DSP存储空间

CMD文件详解与DSP存储空间 CMD的全称为链接命令配置文件。以ROM/FLASH和RAM两类存储器为对象&#xff0c;用户通过编写CMD文件&#xff0c;来管理和分配系统中的所有物理存储器和地址空间。DSP芯片的片内存储器&#xff0c;只要没有被出厂占用&#xff0c;用户都可以全权支配。…

cmd 执行html文件,cmd执行bat文件 cmd文件和bat文件有什么区别?

cmd怎么执行dos下的bat文件在文件目录直接输入bt4.bat就可以了。记住要输入完整的文件名,包换后缀名。比如:11.bat在D盘根目录:在D:\>后面直接输入11.bat 回车。 cmd下执行bat文件的命令 在cmd下执行bat文件的命令的命令 新建一个.bat批处理文件,文件命令为@ECHO OFF c…

CCS中CMD文件

CMD使用举例 技术栈提前认知 1. 如何查看CCS中编译器版本&#xff1f; 概述 TI官方例程分析 1. 在CMD文件中进行配置 //判断当前编译器当前版本,上面有提到如何查看编译器版本 #if __TI_COMPILER_VERSION__ > 15009000 #if defined(__TI_EABI__) //判断“输出格式”…