第一章 四数数独的乐趣
数独作为一种益智游戏,起源于18世纪末的瑞士。20世纪70年代,在美国、日本得以发展,近些年来,在我国开始流行。
数独的种类很多,先从最简单的四数填数字游戏开始,带大家走进有趣又好玩的数独世界。
一、有趣的四数数独游戏
例题1.1
下面是一个4×4的表格,由16个格构成,横向连续排列的4个格组成一行,竖向连续排列的4个格构成一列,粗线条内的2×2四个格构成一个大格。请在空格中填上数字1或2或3或4,要求其中的每一行、每一列以及每一个大格中的数字都不重复。
该如何解决这个问题呢?
初学者容易在遇到解题困难时采用猜测的方法,就是将某一个数字用猜测的方法强行填入到某一个格中,直到出现矛盾,再返回修改猜测的步骤。运气好的时候也许会猜对一次吧,但是,这种方法背离了周密观察及严谨推理的宗旨,本书并不提倡。
还是从游戏规则入手进行分析,即每一行、每一列以及每一个大格内的数字不重复,只要符合规则的结果就予以保留,只要和规则矛盾的结果都予以舍弃。
第1步:下面左侧表格中,注意标记“?”的空格所在的行、列和大格(阴影部分)。
“?”空格所在的行中已经出现了数字2和4,因为每一行中的数字不重复,所以,这个“?”空格的值已经排除了数字2和4的可能性。
同样的道理,“?”空格中也不可能是数字3,因为“?”空格所在的列中已经出现了数字3。
既然“?”空格的数字既不是2和4,也不是3,那只能是1了。
这个寻找“?”空格中的数字的过程就是对空格的同一行、同一列以及同一个大格中已经出现的数字进行点算,如果点算发现1、2、3、4中已经出现了三个数字,未出现的数字只剩下一个数字时,这个数字就是该空格中的数字。
第2步:注意观察下面左侧表格中“?”空格所在的行(阴影部分),该行就差这个“?”空格就被填满了,出现的三个数字是1、2和4,根据一行中数字不重复的规则,“?”空格处的数字是3。
当某一行中只剩下唯一的一个空格没有填入数字时,说明该行已经出现了三个数字了,只有一个数字未出现。因此,这个空格中的数字就是该行中唯一未出现的数字。
第3步:观察下面左侧表格中“?”空格所在的大格以及行和列(阴影部分),点算后得到唯一未出现的数字是2。
第4步:同理,还可以得到第二行最右一个空格的数字是4。
第5步:注意观察下面左侧表格中阴影所在的大格,仅差一个空格就可以被填满,因此,“?”空格中的数字是3。
第6步:同理,右上的大格中,唯一一个空格中的数字是1。
第7步:同理,最左边一列中,唯一一个空格中的数字是4。
第8步:同理,最右边一列中,唯一一个空格中的数字是2。
第9步:注意观察下面左侧表格中“?”空格所在的行、列和大格(阴影部分),点算已经出现的数字,显然,“?”空格中的数字是2。
第10步:注意观察下面左侧表格中阴影所在的列,“?”空格中的数字是1。
第11、第12步:同理,最后余下的两格中的数字分别是3和4。
例题1.1中这种类型的填数字游戏就是四数数独。
二、四数数独及其术语
结合对例题的观察,得知四数数独的游戏盘面是一个4×4的表格,由16个格构成。
水平方向排列的4个格组成行;垂直方向排列的4个格组成列;粗线条内的2×2四个格组成一大格,称这个大格为宫。
有时候,为了方便起见,将行、列和宫都统一称为单元。
如图1.1(a)所示,本书中规定:
行用R1、R2、R3、R4来表示,例如R1表示第一行;列用C1、C2、C3、C4来表示,例如C1表示第一列;宫用第一宫、第二宫、第三宫、第四宫表示。
为了描述方便,格的坐标用它所在的行号和列号来表示,如图1.1(b)所示,格X的坐标可以记做R2C2。
图1.1 四数数独的盘面及坐标示意图
四数数独的规则就是:在游戏盘面上的空格中,填上数字1或2或3或4,要求其中的每一行、每一列以及每一宫内的数字不重复。
每一个单元(行或列或宫)内都只有四个格,而数字也只有四个,数字不重复的意义就在于:每个单元内每个数字都会出现并且仅能出现一次。
当盘面中16个格全部都是空格时,排列组合的数目将非常繁多,如果将盘面上的空格全部填入数字,并且不违反游戏规则,这样形成的盘面称为最终盘面,也可以简称为终盘。
四数数独习题都会在盘面的部分格中给定数字,称为提示数,提示数的功能就是作为解题的线索和初始条件,对于标准的四数数独习题,终盘解是唯一的。
刚刚开始一道四数数独习题时,只借助于提示数进行推理,得到的盘面的某空格中的数字解,称为首解。
下面,再介绍一个对于解决数独习题而言非常重要的概念。
如图1.2所示,当盘面中的某一格与格A同属于一行,或者同属于一列,或者同属于一个宫,就称这个格是格A的同位格,将格A的全部同位格统称为格A的同位群。仔细观察会发现,四数数独中,任何一格的同位群中均有7个同位格。
图1.2 格A的同位群示意图
显然,在前面例题的解题过程中,已经用到了同位群的方法。
三、四数数独的算法总结
根据四数数独的规则,结合例题1.1的解题经验,可以总结出以下的算法。
1.单元唯一法
当某一单元中,有三个格中已经有数字了,只剩下唯一一个空格时,该空格的数字是确定的,就是唯一没有出现的数字。
可以参考例题1.1解答中的第2步。
单元唯一法是单元内数字不重复规则的最简单应用。
2.余数唯一法
什么是余数?余数是针对盘面上的空格而言的,一个空格的余数是指这个空格的同位群中已经出现的数字以外的其它数字。
当某一个空格的余数只剩下唯一一个数字时,那么,该空格的值就是该数字。这个方法称为余数唯一法。
可以参考例题1.1解答中的第1步。
理论上,单元唯一法是余数唯一法的特例。单元唯一法的着眼点是一个单元中唯一的一个空格,而余数唯一法的着眼点是一个空格的同位群中唯一未出现的数字。
3.宫排除法
例题1.2
下面的四数数独表中能够取得首解的位置很多,在第二宫中,能尝试找出一个唯一解吗?
如下表所示,因为空格R1C1中的数字是1,因此,第二宫中,空格R1C3及空格R1C4不可能是数字1,并且空格R2C4的提示数为3,因此只有空格R2C3可能是数字1。根据四数数独的规则,数字1是必须出现在第二宫中的,因此空格R2C3的数字是1。
当宫外的格与宫内的格同属于一行(或同属于一列)时,宫外的格中出现的数字就不可能出现在宫内的格中,也可以说是这些宫内的格排除了该数字。如果用一个数字对一个宫进行排除,当这个宫内只剩下一个空格没有被该数字排除时,这个格的值就是该数字。这个方法就是宫排除法。
对宫的排除可以得出唯一解,如果对行或列进行排除,是否也可以得出唯一解呢?
4.行排除法
例题1.3
还是例题1.2中的表格,在第一行中,能尝试找出一个唯一解吗?
在第二宫中,因为格R2C4的数字是3,因此,格R1C3及格R1C4中的数字不可能是3。这样,在第一行中,空格R1C2的数字是3。
显然,这个方法与宫排除法类似,本题中就是用数字3对第一行进行排除,排除的结果是只有唯一一个空格R1C2没有被数字3排除,这个空格的数字就确定了。
因为排除的对象是行,所以这种解题方法称为行排除法。
5.列排除法
例题1.4
仍然是例题1.2中的表格,在第一列中,能尝试找出一个唯一解吗?
如下表所示,第三宫中,因为空格R4C2的值是数字2,因此,空格R3C1及空格R4C1的值不可能是2。这样,在第一列中,空格R2C1的值为数字2。
这个解法与行排除法的道理是一致的,只不过排除的对象是列,这种解题方法就是列排除法。
单元唯一法和余数唯一法是从数字的角度来观察,找出已经出现的数字,确定未出现的唯一余数,可以统称为余数法。
宫排除法、行排除法及列排除法是从空格的角度来观察,观察某一个单元中的空格是否被某个数字排除,确定没有被该数字排除的唯一空格,可以统称为排除法。
好吧,请拿起笔,开始这个有趣的填数字游戏吧。
习题一