龙骨掉叶子:关于数独游戏

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 07:57:11
1. 什么是数独?    数独(日语:数独、sudoku)是一种源自 18 世纪末的瑞士,后在美国发展、并在日本发扬光大的数学智力拼图游戏。
    传统的数独游戏是将一个大正方形划成3×3的九个九宫格,每个九宫格又由3行3列共9个小方格构成,这样整个大正方形形成一个9×9的方格群。在这个大正方形内填满1-9的数字,要求大正方形每一行、每一列及每个九宫格内均必须包括1到9的每一个数字,既不能遗漏也不能重复。
    数独的玩法逻辑简单,数字排列方式千变万化。不少教育者认为数独是锻炼脑筋的好方法。  2. 如何解数独题?    数独是一种以数字排列为基础的填空游戏,并不涉及任何计算学问,但需运用推理及逻辑思考找出答案,是锻炼脑筋的好方法。
    解数独题常用的方法包括直观法和候选数法。
    直观法就是不需要任何辅助工具,从接到数独谜题的那一刻起就可以立即开始解题。数独直观法解题技巧主要有:唯一解法 基础摒除法 唯余解法 区块摒除法 组合摒除法 矩形摒弃法
    使用候选数法解数独题目需先建立候选数列表,根据各种条件,逐步安全的清除每个宫格候选数的不可能取值的候选数,从而达到解题的目的。数独候选数法解题技巧主要有:
唯一候选数法 隐性唯一候选数法 候选数区块删减法 候选数对删减法 隐性候选数对删减法 三数集删减法 隐性三数集删减法 候选数矩形删减法 三链数删减法 XY形态匹配删减法 XYZ形态匹配删减法 WXYZ形态匹配删减法       如:基础摒弃法     基础摒除法是直观法中最常用的方法,也是在平常解决数独谜题时使用最频繁的方法。单元排除法使用得当的话,甚至可以单独处理中等难度的谜题。
    使用单元排除法的目的就是要在某一单元(即行,列或区块)中找到能填入某一数字的唯一位置,换句话说,就是把单元中其他的空白位置都排除掉。
    那么要如何排除其余的空格呢?当然还是不能忘了游戏规则,由于1-9的数字在每一行、每一列、每一个九宫格都要出现且只能出现一次,所以:
    如果某行中已经有了某一数字,则该行中的其他位置不可能再出现这一数字;
    如果某列中已经有了某一数字,则该列中的其他位置不可能再出现这一数字;
    如果某区块中已经有了某一数字,则该区块中的其他位置不可能再出现这一数字。
    基础摒除法可以分为行摒除、列摒除和九宫格摒除。
    又如:唯一候选数法    唯一候选数法是候选数删减法中最简单的一种方法,就是通览所有单元格的候选数列表,如果哪个单元格中只剩下一个候选数,就可应用唯一候选数法,在该单元格中填入这个数字,并在相应行,列和九宫格的其它单元格候选数列表中删除该数字。
如左图,C4单元格的候选数列表中只有数字4,所以说明只有数字4才能填入C4单元格,我们将4填入C4,并且在行C、第4列和A4-C6九宫格内其它单元格候选数列表中删除数字4,结果如下图。
如左图,整理候选数列表后,C6单元格的候选数列表变为只有数字9,于是继续应用唯一候选数法,将数字9填入C6,并在行C、第6列和A4-C6九宫格内其它单元格候选数列表中删除数字9。后面以此类推,继续应用唯一候选数法,直到所有单元格的候选数列表都含有两个以上数字为止。           又如:候选数区块删减法   候选数区块删减法也是比较常用的方法,它的目的是尽量删减候选数,而不一定要生成某一单元格的唯一解(当然,产生唯一解更好)。候选数区块删减法是利用九宫格中的候选数和行或列上的候选数之间的交互影响而实现的一种删减方法。
    在某一九宫格中,当所有可能出现某个数字的单元格都位于同一行时,就可以把这个数字从该行的其他单元格的候选数中删除;
    在某一九宫格中,当所有可能出现某个数字的单元格都位于同一列时,就可以把这个数字从该列的其他单元格的候选数中删除;
    在某一行(列)中,当所有可能出现某个数字的单元格都位于同一九宫格中时,就可以把这个数字从该九宫格的其他单元格的候选数中删除。

如左图,考察D4-F6九宫格,数字4只在第5列三个单元格的候选数列表中出现,所以在D4-F6九宫格中数字4就必然会填入第5列的某个单元格内,这样,第5列的其它单元格就不能再填入数字4,所以将第5列其它单元格的候选数列表中删除数字4。所以A5单元格的候选数列表变成{1,3,5,6,7},B5单元格的候选数列表变成{3},C5单元格的候选数列表变成{5,6,7}。
再考察A7-C9九宫格,数字4只在行A三个单元格的候选数列表中出现,应用候选数区块删减法,可以将行A的其它单元格的候选数列表中的数字4删去。于是A1单元格的候选数列表变成{3,5,7,9},A2单元格的候选数列表变成{3,5,7},A3单元格的候选数列表变成{5,9},A5单元格的候选数列表变成{1,3,5,6,7,9},A6单元格的候选数列表变成{5,7,8}。
如左图,考察行E,数字4只在D4-F6九宫格的几个单元格候选数列表中出现,应用候选数区块删减法,可以将D4-F6九宫格内其它单元格的候选数列表中的数字4删去。所以D7单元格的候选数列表变成{3,7,8},D8单元格的候选数列表变成{7,8}。
再考察第4列,数字2只在G4-I6三个单元格的候选数列表中出现,应用候选数区块删减法,可以将G4-I6的其它单元格的候选数列表中的数字2删去。于是H5单元格的候选数列表变成{3,5}。         又如:候选数对删减法    候选数对删减法依据的原理是数字1-9在同一行、同一列和同一九宫格内不能出现2次或2次以上。这样,如果在同一行、同一列和同一九宫格内两个单元格的候选数列表都是{a,b},那么如果其中一个单元格填入的数字为a,另一个单元格填入的数字就应该是b;反之,如果其中一个单元格填入的数字为b,另一个单元格填入的数字就应该是a。也就是说,a,b两个数字就应该分别填入这两个单元格,所以该行、该列或是该九宫格内其它单元格就不应该再填入数字a和b。
    所以候选数对删减法就是:在一个行、列或九宫格中,如果有两个单元格都包含且只包含相同的两个候选数,则这两个候选数字应该从该行、该列列或该九宫格的其他单元格的候选数列表中删去。


如左图,考察F4单元格和F6单元格,候选数列表均为{7, 9}。由于F4,F6单元格都处于D4-F6九宫格中,所以可以从D4-F6九宫格其它单元格的候选数列表中将数字7和数字9删去,所以F5单元格的候选数列表为{2}。
又因为于F4,F6单元格都处于行F,所以可以从行F其它单元格的候选数列表中将数字7和数字9删去。所以F1单元格的候选数列表变为{1, 4, 6, 8},F2单元格的候选数列表变为{1, 2, 8},F5单元格的候选数列表变为{2},F7单元格的候选数列表变为{3, 8},F8单元格的候选数列表变为{1, 6, 8},F9单元格的候选数列表变为{1, 3, 6, 8}。
再考察D1单元格和H1单元格,它们的候选数列表均为{6,7}。由于它们都位于第1列,所以可以从第1列其它单元格的候选数列表中将数字6和数字7删去。这样E1单元格的候选数列表变为{1, 8, 9},F1单元格的候选数列表变为{1, 4, 8, 9},G1单元格的候选数列表变为{3, 8},I1单元格的候选数列表变为{3, 8}。