数独技巧(直观法).pdf
1.数独(SuDoku)介绍
数独(日语:数独すうどく)是一种源自18世纪末的瑞士,后在美国发展、并在日本得以发扬光大
的数学智力拼图游戏。拼图是九宫格(即3格宽×3格高)的正方形状,每一格又细分为一个九宫格。
在每一个小九宫格中,分别填上1至9的数字,让整个大九宫格每一列、每一行的数字都不重复。
数独玩法逻辑简单,数字排列方式千变万化。不少教育者认为数独是锻炼脑筋的好方法。
历史
如今数独的雏型首先于1970年代由美国的一家数学逻辑游戏杂志发表,当时名为NumberPlace。现今流
行的数独于1984年由日本游戏杂志《パズル通信ニコリ》发表并得了现时的名称。数独本是“独立的
数字”的省略,因为每一个方格都填上一个个位数。
数独冲出日本成为英国当下的流行游戏,多得曾任香港高等法院法官的高乐德(WayneGould)。2004
年,他在日本旅行的时候,发现杂志的这款游戏,便带回伦敦向《泰晤士报》推介并获得接纳。英国《每
日邮报》也于三日后开始连载,使数独在英国正式掀起热潮。其他国家和地区受其影响也开始连载数独。
数独术语
要理解如何对一个数独题求解,我们先来介绍一些在本网站中使用的术语。
单元格和值
一个数独谜题通常包含有9x9=81个单元格,每个单元格仅能
填写一个值。对一个未完成的数独题,有些单元格中已经填入
了值,另外的单元格则为空,等待解题者来完成。
行和列
习惯上,横为行,纵为列,在这里也不例外。行由横向的9个
单元格组成,而列由纵向的9个单元格组成。很明显,整个谜题
由9行和9列组成。为了避免混淆,这里用大写英文字母和数字
分别表示行和列。例如,单元格指的是行G和第6列交界处
的单元格,它已填入了值7。
区块
术语区块指的是起始于特定位置的9个相邻的单元格组。在上图中,区块用交替相间的背景颜色来注明。
例如,对于最左上角的区块,我们表示为起始于的区块。
单元
任何一行,一列或一个区块都是一个单元。每个单元都必须包含全部但不重复的数字1到9。
数独题目难度
很多人认为数独题目的难度取决于已填入谜题中的数字的数量,其实这并不尽然。一般来说,填入的数
字越多,题目就越容易求解。然而实际上,有很多填入数字多的题目比填入数字少的题目要难得多。这
就需要有其他的方法来确定的难度。
在应用中使用得比较多的一种方法是看看要解决一道数独题目需要用到哪些数独技巧。极简单的题
目用到的可能只是最基本的技巧。而相对复杂的题目可能要用到十分高深的解题方法。通过这样来设定
游戏的难度相对而言较为客观。
数独的变化
人们总是不满足于已有的一切。同样,对于普遍使用的9x9谜题而言,大量涌现的变形数独题也在不断
丰富着数独家族。
一种比较常见的数独变形是大小上的改变。现在已有的大小包括:4x4,6x6,12x12,16x16,25x25,
甚至还有100x100。
另一种数独变形题是在原数独规则的基础上加入其他的规则。譬如X形数独就要求除原来的数独规
则外,连主对角线上的单元格也要满足数字1到9的唯一性和完整性。而杀手数独则要求每个“区”(虚
线环绕的一组单元格)中的值必须唯一且总和等于区的右上角所指定的数字。
2.数独技巧(SudokuStrategies)
对于数独游戏的解法,通常采用``直观法(DirectEliminationTechniques)和``候选数法(Candidates
EliminationTechniques).
直观法(DirectEliminationTechniques),顾名思义,就是通过对谜
题中现有的数字进行分析,继而逐一确定剩余空格中的数字的
方法.它是最常用并且相对简单的方法,对于比较容易的谜题,
可以快速求解并收到良好的效果.但是遇到比较复杂的题目,
直观法(DirectEliminationTechniques)就稍显力不从心了.
候选数法(CandidatesEliminationTechniques),是先在所有空白
的单元格中写上所有可能出现的数字,然后通过一些常用的算
法来删减候选数,最终获得唯一确定的候选数.候选数法
(CandidatesEliminationTechniques)被广泛使用在电脑生成谜题
及解题的实践中,这不仅因为它编程相对容易,而且它的算法
在不断增加,使它的解题效率和能力都得以大力提高.
3.直观法(DirectEliminationTechniques)
经常在报章杂志上看到的数独谜题,一般就算再难都可以用直观法来解决。它不需要象候选数法
(CandidatesEliminationTechniques)那样在每个空白的单元格中用铅笔填上一大堆候选数。你只要有相对
锐利的眼光和一定的逻辑分析能力,就可以准确地把空余的数字逐个填出来。实际上,直观法就是对数
独游戏规则的充分利用。虽然它并不如候选数法(CandidatesEliminationTechniques)那样强大,但通常要
想体会解决数独谜题的乐趣,使用直观法却是不二之选。
直观法(DirectEliminationTechniques)具有以下的特点:
1.轻松上手。即便是数独新手,在拿到谜题的一刹那,就可以用直观法来解题了。
2.无需辅助。在纸上解题时一般只需要一支钢笔就可以。因为是通过推理和逻辑分析来确定哪个格
填哪个数,或是哪个数填在哪个格里,所以基本不需要猜测。
3.容易掌握。对于直观法(DirectEliminationTechniques)中应用的各种算法,可以很快掌握并应用于
实际中。
4.相对简单。比起候选数法(CandidatesEliminationTechniques),它的算法相对比较简单,当然能解决
的谜题的复杂度也相对要低。
在直观法(DirectEliminationTechniques)中,常用的算法包括:
1.单元唯一法(SolePositionTechnique)
2.单元排除法(BasicEliminationTechnique)
3.区块排除法(BlockEliminationTechnique)
4.唯一余数法(SoleNumberTechnique)
5.组合排除法(CombinationEliminationTechnique)
6.矩形排除法(RectangleEliminationTechnique)
3.1单元唯一法(SolePositionTechnique)
这应该算是直观法中最简单的方法了。基本上只需要看谜题,推理分析一概都用不上,这是因为要
使用它所需满足的条件十分明显。同样,也正是因为它简单,所以只能处理很简单的谜题,或是在处理
较复杂谜题的后期才用得上。
我们先来看一个例子:在上图中,观察行B,可以看到除了
外,其他所有的单元格中都已有了数字,根据数独游戏
的规则,即每行,列或区块中不能有重复的数字,则中
能填入的数字只能是行B中所未出现过的,也就是数字3。
所以可以毫不犹豫地在中填入3。
这就是单元唯一法在行中的应用.这里的单元(Unit,orgroup),指的是行,列或区块.所以有三种情况:
1.当某行有8个单元格中已有数字,或
2.当某列有8个单元格中已有数字,或
3.当某区块有8个单元格中已有数字.
无论是哪种情况,我们都可以很快地在该行,列或区块剩余的空格中填入该单元还未出现过的数字.
左图是单元唯一法在列中的应用:
在区块中也是一样:在起始于的区块中,只有还未
填入数字,且这个区块中数字5还未出现过,所以可以马上
在中填入5。
单元唯一法在解题初期应用的几率并不高,而在解题后期,随
着越来越多的单元格填上了数字,使得应用这一方法的条件
也逐渐得以满足.
3.2单元排除法(BasicEliminationTechnique)
单元排除法是直观法中最常用的方法,也是在平常解决数独谜题时使用最频繁的方法.使用得当的话,
甚至可以单独处理中等难度的谜题.
使用单元排除法的目的就是要在某一单元(即行,列或区块)中找到能填入某一数字的唯一位置,换
句话说,就是把单元中其他的空白位置都排除掉.它对应于候选数法中的隐式唯一法.
那么要如何排除其余的空格呢?当然还是不能忘了游戏规则,即行,列或区块中不能有重复的数字.从
另一个角度来理解,就是
1.如果某行中已经有了某一数字,则该行中的其他位置不可能再出现这一数字.
2.如果某列中已经有了某一数字,则该列中的其他位置不可能再出现这一数字.
3.如果某区块中已经有了某一数字,则该区块中的其他位置不可能再出现这一数字.
单纯理解上面的规则还是不足以解题,但是在实践中这些规则却可以交叉使用.在实际解题过程中,应
用最多也最方便的是对区块的单元排除法,我们可以先看下面这个例子:
对于起始于的区块,其未填数字的空格有6个之多,如果不
使用单元排除法,是很难为这一区块填入任何数字的.这时
我们就可以利用行,列及区块的相互关系,即一个单元格既
在某一行上,也同时在某一列上以及某一区块中的这种关系
来解题.
观察数字9在谜题中的位置,可以看到它出现在
,,,,和.而这些位置中,只有,
和与起始于的区块有关联.因为=9,它所在的第1
列上的其他单元格中不可能再出现9,而区块中的和
正好也在第1列上,所以这两个单元格填入9的可能性被排
除.同理,因为=9,它所在的第2列中的其他单元格不可
能再填入9,而区块中的和也正好在第2列上,因此,
这两个单元格填入9的可能性也被排除掉了.再看行D,因为
=9,所以该行上的,和也不可能再填入9,而
这些单元格正好也在起始于的区块中.所以,这个区块中
能填入数字9的位置就只剩下了,这样就通过排除法找
到了答案,即=9.
下面再看一个在行中使用单元排除法的例子:
在谜题中观察数字4和行H,在行H有5个空单元格无法
确定数字,但是位置上的4使得其所在的第3列中的
其他单元格上不能再出现4,所以不能填入4.上
的4使得其所在的区块中也不能再填入4,它帮助行H排
除了两个单元格和,而第8列上的中的数字
4使得同样位于这一列上的也排除了填入4的可能.
这样,行H中能填入4的位置就只剩下了.
在列中也可以使用单元排除法:
在第7列中,我们试图确定能填入数字1的位置.在行B
中,数字1已经出现在上,所以不可能再填入数字
1了.而位于的数字1也使得排除了填入数字1
的可能,因为它们位于同一区块中.这样,第7列上就只有
能填入数字1了.
通过上面的示例,可以看到,要对区块使用单元排除法,需要观察与该区块相交的行和列.要对行使
用单元排除法,需要观察与该行相交的区块和列.要对列使用单元排除法,需要观察与该列相交的区块
和行.
在实际解题过程中,行,列和区块之间的关系并不象上面这些图中所示的那么明显,所以需要一定的眼
力和细心观察.一般来说,先看哪个数字在谜题中出现得最多,就从哪个数字开始下手,找到还未填入这
个数字的单元(行,列或区块),利用已填入该数字的单元格与单元之间的关系,看能不能排除一些不可
能填入该数字的位置,直到剩下唯一的位置.如果害怕搞不清已经处理过哪些数字的话,可以从数字1开
始,从左上角的区块开始一直检查到右下角的区块,看能不能在这些区块中应用单元排除法.然后测试
数字2,以此类推.
单元排除法是应用得最多的直观法,虽然在实践中经常会因为粗心而漏掉很多使用这一方法的机会,
但只要勤加练习,就可以运用自如.
3.3区块排除法(BlockEliminationTechnique)
区块排除法是直观法中进阶的技法.虽然它的应用范围不如单元排除法那样广泛,但用它可能找到
用单元排除法无法找到的解.有时在遇到困难无法继续时,只要用一次区块排除法,接下去解题就会势
如破竹了.
区块排除法实际上是利用区块与行或列之间的关系来实现的,这一点与单元排除法颇为相似.然而,
它实际上是一种模糊排除法,也就是说,它并不象单元排除法那样利用谜题中现有的确定数字对行,列
或区块进行排除,而是在不确定数字的具体位置的情况下进行排除的.这句话听起来似乎不好理解,让
我们先从一个例子入手,看看区块排除法是怎么应用的.
对于上面这个谜题,用基本的单元排除法或是单元唯一法都无法再找到解.这时可以尝试使用区块排除
法.
我们先从填入数字最多的区块着手,也就是起始于的
区块,该区块中只有和为空,且剩余数字1和2还
未填入.这样,我们可以想办法确定这两个数字的位置.
观察全局,可以看到=2,根据单元排除法,它所在的第2
列上不能再出现数字2,所以和将不能填入2,这
使得起始于的区块中数字2可能出现的位置仅剩下
和,见下图:
虽然我们无法确定2在起始于的区块中的确定位置,但
幸运的是,能填入2的位置正好都在行I上,也就是说,无
论2在还是在,行I的其他单元格中将不可能再出
现数字2,所以可以毫不犹豫地排除在填入2的可能
性,这样,对于起始于的区块而言,能填入数字2的位
置就只剩下了.所以=2.接下来,当然毫无疑问,
利用单元唯一法,在填入数字1.
先小结一下上面的求解方法:解题时,实际上是在对目标区块(主区块)有影响的区块(辅助区块)
中应用单元单元排除法,使辅助区块满足某些条件并能参与对主区块的数字排除.
实际应用中,可能出现下面四种情况:
1.当某数字在某个区块中可填入的位置正好都在同一行上,因为该区块中必须要有该数字,所以这
一行中不在该区块内的单元格上将不能再出现该数字.
2.当某数字在某个区块中可填入的位置正好都在同一列上,因为该区块中必须要有该数字,所以这
一列中不在该区块内的单元格上将不能再出现该数字.
3.当某数字在某行中可填入的位置正好都在同一区块上,因为该行中必须要有该数字,所以该区块
中不在该行内的单元格上将不能再出现该数字.
4.当某数字在某列中可填入的位置正好都在同一区块上,因为该列中必须要有该数字,所以该区块
中不在该列内的单元格上将不能再出现该数字.
其中1,2两种情况相对常见,也比较容易判断.上面的示例就是第1种情况.下面我们会看到第2种情
况的例子:
虽然在起始于的区块中,未填入数字的空单元格多达4
个,但我们还是可以轻松地确定数字5的位置.这是因为在
起始于的区块中,我们欣喜地发现数字5可能出现的位
置正好都在第8列上,这时5的确切位置已经不重要了,因
为它已经满足了上面介绍的第2种情况的条件,因此可以
参与对起始于的区块进行数字排除了.在它的影响下,
和中填入数字5的可能性已经不存在,因为它们
都在第8列上.这样,在起始于的区块中,数字5能填
入的位置只剩下和了.这时,我们再利用单元排
除法,通过位置上的数字5再消除其所在行A上的,
最终得到能填入5的唯一位置.
下面看几个比较少见的例子
在行C上,数字3的位置可以通过下面的方法来确定:
先看行B,利用单元排除法,通过和位置上的3进
行列排除,得到行B中能填入3的位置为和.碰巧
的是,这两个单元格都在起始于的区块中,这时已经满
足了上述情况3的条件.利用单元排除法的区块排除,则行
C上的和都不能再填入3;再加上的列排除的
共同努力,最终确定数字3在行C上的唯一位置就是.
第4种情况的例子如下:
在这个示例中,只是使用单元排除法和单元唯一法到这
一步就继续不下去了.要想求得数字8在第6列的位置,
就必须要借助区块排除法.先看第4列,通过位于和
的数字8的行排除,使8在第4列可能填入的位置只
剩下和,而这两个单元格正好都在起始于
的区块中.因为第4列不能没有数字8,而数字8如果填
在区块中的其他位置(如,或)时将迫使
和上不能再填入8,这样会导致第4列没有数字8.
因此,第6列中的,和能填入数字8的可能
性被排除.这样第6列中就只剩下能填入8了.
实际解题过程中,还会碰到复杂的情况,看左面的谜题:
你能确定数字3在起始于的区块中的位置吗?
先看位于的数字3,它不仅排除了同一行中和
中填入3的可能性,也同时排除了同一行中和
填入3的可能性,这使得在起始于的区块中,能
填入3的位置只剩下和,见下图:
利用区块排除法,在起始于的区块中,无论3在
还是,行B中的其他位置都不能再填入3,所以
,和都被排除.于是,在起始于的区块
中,能填入3的位置仅剩下和了.但至此我们还
无法确定3的准确位置,这时我们还要借助于其他的辅助
区块来进一步排除.
观察起始于的区块,利用位置上的3排除同一行
的,以及用位置上的3排除同一列的和
,使区块中可能填入3的位置只余和,刚好
这两个位置都在第2列中,符合上面介绍的第2种情况,
于是可以把也排除掉.最后,我们就可以很肯定地
在中填入数字3了.
这个例子同时使用了多个辅助区块同时参与排除.在实际使用中虽然这种情况并不常见,但却也不
少见.关键在于如何能正确识别并恰当应用区块排除法.相信通过大量的练习并勤于分析思考,这种方
法就可以运用自如,得心应手.
下面是其他的一些例子,可以帮助更好地理解并掌握这种技法:
3.4唯一余数法(SoleNumberTechnique)
唯一余数法是直观法中较不常用的方法.虽然它很容易被理解,所以说明这个方法不需要很大篇辐,
然而在实践中,却不易看出能够使用这个方法的条件是否得以满足,从而使这个方法的应用受到限制.
与单元唯一法相比,唯一余数法是确定某个单元格能填什么数的方法,而单元唯一法是确定某个数
能填在哪个单元格的方法.另外,应用单元唯一法的条件十分简单,几乎一目了然.
与候选数法相比,唯一余数法相当于显式唯一法.虽然显式唯一法是候选数法中最简单且应用最容
易的方法,但在直观法中却正好相反.
先看一个例子:
对于单元格应该填入什么数字,就算你把前面介绍
的所有直观技法都用上,也不得而知.然而,我们通过观
察它所在的行,列和区块,可以发现除了数字2以外,1到
9中其他的数字都出现了,其中行G中包含了7,6,9,5,3
和8,第9列中包含了数字5,8,7和1,起始于的单
元格中包含了3,8,4,7,5和1.这样,如果不填入数
字2,就一定会违反游戏“行,列或区块不能出现重复数
字”的规则.所以中的数字一定是2
总结一下,就是如果某一单元格所在的行,列及区块中共出现了8个不同的数字,那么该单元格可以确定
地填入还未出现过的数字.
怎么样,很简单吧,但在实践中却不那么容易识别.看下
面的谜题:
你能看出来对哪个单元格应用唯一余数法吗?
还有这个谜题:
答案分别是=9和=9.
一般来说,只有在使用基本的排除方法都失效的情况下,
才试着使用这个方法来解题.
3.5组合排除法(CombinationEliminationTechnique)
组合排除法和区块排除法一样,都是直观法中进阶的技法,但它的应用范围要更小一点.一般情况下,
基本没有机会用到这种方法解题,所以要找到相应的例子也都很困难.当然,如果你希望优先以这个技
法来解题的话,还是能碰到很多能符合使用组合排除法条件的情况.
组合排除法,顾名思义,要考虑到某种组合.这里的组合既包括区块与区块的组合,也包括单元格与
单元格的组合,利用组合的关联与排斥的关系而进行某种排除.它也是一种模糊排除法,同样是在不确
定数字的具体位置的情况下进行排除的.下面先看一个例子:
对于这个谜题,你能确定数字6在起始于的区块中的位
置吗?
要想获得正确的答案初看起来有些困难.因为虽然在
和已经存在了两个6,但是利用它们只能行排除区块中
的和两个单元格,还是无法确定6到底是在
还是在中.这时候,组合排除法就派上用场了.
现在撇开起始于的区块,先看它上面的两个区块,即起
