谁知道数独怎么玩

谁知道数独怎么玩,第1张

 九宫格数独 百科名片

九宫格数独,是一种源自18世纪末的瑞士,后在美国发展、并在日本得以发扬光大的数字谜题。数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次。这种游戏全面考验做题者观察能力和推理能力,虽然玩法简单,但数字排列方式却千变万化,所以不少教育者认为数独是训练头脑的绝佳方式。

目录[隐藏]

数独的历史

数独的基本结构与规则元素构成

规则

基本解法举例基础摒除法

唯一解法

唯余解法

区块摒除法

余数测试法

隐性唯一候选数法

三链数删减法

隐性三链数删减法

矩形顶点删减法

三链列删减法

关键数删减法

变形数独概述

数独的近亲

给出最少数字且有唯一解的数独

求解数独的程序代码数独的历史

数独的基本结构与规则 元素构成

规则

基本解法举例 基础摒除法

唯一解法

唯余解法

区块摒除法

余数测试法

隐性唯一候选数法

三链数删减法

隐性三链数删减法

矩形顶点删减法

三链列删减法

关键数删减法

变形数独概述

数独的近亲

给出最少数字且有唯一解的数独

求解数独的程序代码

[编辑本段]数独的历史

数独前身为“九宫格”,最早起源于中国。数千年前,我们的祖先就发明了洛书,其特点较之现在的数独更为复杂,要求纵向、横向、斜向上的三个数字之和等于15,而非简单的九个数字不能重复。中国古籍《易经》中的“九宫图”也源于此,故称“洛书九宫图”。而“九宫”之名也因《易经》在中华文化发展史上的重要地位而保存、沿用至今。 1783年,瑞士数学家莱昂哈德·欧拉发明了一种当时称作“拉丁方块”(Latin Square)的游戏,这个游戏是一个n×n的数字方阵,每一行和每一列都是由不重复的n个数字或者字母组成的。 19世纪70年代,美国的一家数学逻辑游戏杂志《戴尔铅笔字谜和词语游戏》(Dell Puzzle Mαgαzines)开始刊登现在称为“数独”的这种游戏,当时人们称之为“数字拼图”(Number Place),在这个时候,9×9的81格数字游戏才开始成型。填充完整后 1984年4月,在日本游戏杂志《字谜通讯Nikoil》(《パズル通信ニコリ》)上出现了“数独”游戏,提出了“独立的数字”的概念,意思就是“这个数字只能出现一次”或者“这个数字必须是唯一的”,并将这个游戏命名为“数独”(sudoku)。 一位前任香港高等法院的新西兰籍法官高乐德(Wayne Gould)在1997年3月到日本东京旅游时,无意中发现了。他首先在英国的《泰晤士报》上发表,不久其他报纸也发表,很快便风靡全英国,之后他用了6年时间编写了电脑程式,并将它放在网站上,使这个游戏很快在全世界流行。从此,这个游戏开始风靡全球。后来更因数独的流行衍生了许多类似的数学智力拼图游戏,例如:数和、杀手数独。 中国大陆是在2007年2月28日正式引入数独 2007年2月28日,北京晚报智力休闲数独俱乐部(数独联盟sudokufederation前身)在新闻大厦举行加入世界谜题联合会的颁证仪式,会上谜题联合会秘书长皮特-里米斯特和俱乐部会长在证书上签字,这标志着北京晚报智力休闲俱乐部成为世界谜题联合会的39个成员之一,这也标志着俱乐部走向国际舞台,它将给数独爱好者带来更多与世界数独爱好者们交流的机会。

[编辑本段]数独的基本结构与规则

元素构成

数独基本元素示意图单元格:数独中最小的单元,标准数独中共有81个; 行:横向9个单元格的集合; 列:纵向9个单元格的集合; 宫:粗黑线划分的区域,标准数独中为3×3的9个单元格的集合; 已知数:数独初始盘面给出的数字; 候选数:每个空单元格中可以填入的数字。

规则

标准数独的规则为:数独每行、每列及每宫填入数字1-9且不能重复。

[编辑本段]基本解法举例

数独解法全是由规则衍生出来的,基本解法分为两类思路,一类为排除法,一类为唯一法。更复杂的解法,最终也会归结到这两大类中。 下边以图示简单介绍几种解法,只要你花几分钟看一遍,马上就可以开始做数独了。

基础摒除法

基础摒除法就是利用1 ~ 9 的数字在每一行、每一列、每一宫都只能出现一次的规则进行解题的方法。基础摒除法可以分为行摒除、列摒除、九宫格摒除。 实际寻找解的过程为: 寻找九宫格摒除解:找到了某数在某一个九宫格可填入的位置只余一个的情形;意即找到了 该数在该九宫格中的填入位置。 寻找列摒除解:找到了某数在某列可填入的位置只余一个的情形;意即找到了该数在该列中的填入位置。 寻找行摒除解:找到了某数在某行可填入的位置只余一个的情形;意即找到了该数在该行中的填入位置。 基础摒除法的提升方法是区块摒除法,是直观法中使用频率最高的方法之一

唯一解法

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

唯余解法

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

区块摒除法

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

余数测试法

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

隐性唯一候选数法

当某个数字在某一列各宫格的候选数中只出现一次时,那么这个数字就是这一列的唯一候选数了.这个宫格的值就可以确定为该数字. 这是因为,按照数独游戏的规则要求每一列都应该包含数字1~9,而其它宫格的候选数都不含有该数,则该数不可能出现在其它的宫格,那么就只能出现在这个宫格了. 对于唯一候选数出现行,九宫格的情况,处理方法完全相同。

三链数删减法

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

隐性三链数删减法

在某行,存在三个数字出现在相同的宫格内,在本行的其它宫格均不包含这三个数字,我们称这个数对是隐形三链数.那么这三个宫格的候选数中的其它数字都可以排除. 当隐形三链数出现在列,九宫格,处理方法是完全相同的. ------------------------------------------ 修改为:在某行,存在三个候选数字分别出现在三个宫格内, 在本行的其它宫格均不包含这三个数字,我们称这个数对是隐形三链数.那么这三个宫格的其它候选数都可以排除. 当隐形三链数出现在列,九宫格,处理方法是完全相同的 或者: 利用“找出某3个数字仅出现在某行、某列或某一个九宫格的某三个宫格候选数中的情形,进而将这三个宫格的候选数删减成该3个数字”的方法就叫做隐性三链数删减法(Hidden Triples)。

矩形顶点删减法

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

三链列删减法

三链列删减法是矩形顶点删减法的扩展,如果不清楚矩形顶点删减法,可以参考矩形顶点删减法,以便于更容易理解本节内容。 利用“找出某个数字在某三列仅出现在相同三行的情形,进而将该数字自这三行其他宫格候选数中删减掉”; 或“找出某个数字在某三行仅出现在相同三列的情形,进而将该数字自这三列其他宫格候选数中删减掉”的方法 就叫做三链列删减法。

关键数删减法

在进入到解题后期,利用前面讲到的唯一候选数法、隐性唯一候选数法、 区块删减法、数对删减法、隐性数对删减法、 三链数删减法、隐性三链数删减法、矩形顶点删减法、 三链列删减法都无法有进展的时候,可以考虑使用关键数删减法。关键数删减法就是在后期找到一个数,这个数在行(或列,九宫格)仅出现两次的数字。我们假定这个数在其中一个宫格类,继续求解,如果发生错误,则确定我们的假设错误。如果继续求解仍然出现困难,不妨假设这个数在另外一个宫格,看能不能得到错误。这就是关键数删减法 排除法 当某一列,某一行或某一宫里已填7个数字时,可采用排除法,排除不可能出现在这个格子的数,从而确定格子里应该填什么数。比如某一行已填1,3,4,5,7,8,9,还剩2,6,而其中一个空格所在的列上已有了2,可知这个空格里不可能是2,那么另外一个空格里一定是2,那么这个空格里一定是6。 当某一列,某一行或某一宫里已填6个数字时,也可采用排除法。

[编辑本段]变形数独概述

数独发展到今天,类型已经多种多样,如果按不同条件细分绝不下百种,而且数量还在增加中。大家平时可以常见的变形数独,如:对角线数独、锯齿数独、杀手数独等等。 对角线数独锯齿数独杀手数独 所谓变形数独,即改变一些标准数独的条件或规则,形成的新型数独题目,有的变形数独也会同时具备多种变形条件,变形条件如下: 1、使用数字的数量不同可以有4字数独、6字数独、16字数独、25字数独等等; 2、增加限制区域的类别可以有对角线数独、额外区域数独、彩虹数独等等; 3、宫形发生变化有锯齿数独;多个数独叠加起来有连体数独、武士数独、超级数独等等 4、用其它元素代替已知数字有字母数独、骰子数独、数码数独等等; 5、利用单元格内数字之和或乘积等关系有杀手数独、边框数独、箭头数独、魔方数独、算式数独等等; 6、利用相邻单元格内数字的关系有连续数独、不等号数独、堡垒数独、XV数独、黑白点数独等等; 7、单元格限制数字属性有奇偶数独、大中小数独等等; 8、利用数独外提示数字有边缘观测数独、摩天楼数独等等; 9、按禁止同一数字位置有无缘数独、无马数独等等; 10、非方形数独有圆环数独、立方体数独、六角数独、蜂窝数独等等; 11、需要多个数独条件配合才能解题的有三合一数独、双胞数独等等。 以上11种分类并非全部变化条件,只是常见的大类,还有不少变形数独未举例,其实变形的条件不会有极限的,只要你有想象力,可以创造出属于你自己的新型变形数独。虽然数独条件变换多端,但有一条始终不变的绝对条件——同一限制区域内不能出现重复数字。只要符合这个条件,就没有脱离“数独”的范畴。

[编辑本段]数独的近亲

谜题(Pazzle):排除文化差异对做题者的影响,只用数字和图形表示的逻辑推理游戏。 数独是谜题(Pazzle)中的一个分支,由于其规则简单、种类众多从而从众多谜题脱颖而出,成为大众熟知的数字谜题。 不过除了数独以外,还有不少谜题也非常出色,也有众多的拥护者,而且与数独有千丝万缕的关系。数独爱好者同样不能错过这些优秀的逻辑推理游戏。下面简单介绍几类谜题: 数和(Kakuro):与杀手数独很像的一类谜题,规则要求同行、同列(同一段)数字不能重复,且每段数字之和等于左边和上边的提示数字。 数图(Nonograms\Griddlers):根据盘面周围的数字提示,把盘中涂成符合条件的图案,很像“十字绣”。 数回(Slither Link):游戏由0,1,2,3四个数字组成。每一个数字,代表四周划线的数目,并在最后成为一个不间断、不分岔的回路。 数墙(Nurikabe):数墙的世界,是一个非黑即白的二元世界;在游戏中,你要决定的是,那些格子需要涂黑,那一些应该留白。 数连(Number Link):与数独一样,数连是一个简单明快的游戏。你只需要把属于相同数字的同伴,以线连接起来。不过,这个游戏看起来非常简单,实际上是很有深度的。 图独(tudoku):数独的一种扩展,将数字换成有趣的图形,看似一样,但换成图形后大大增强了数独趣味性,使游戏不会那么枯燥,很合适小孩子玩,即动脑又锻炼记忆力。

[编辑本段]给出最少数字且有唯一解的数独

数独初盘最少可以有17个数。 与数独终盘相对应,一个数独游戏给出的初始条件称为初盘。由于规则所限,给出的初盘数字个数必须在32以下。 一般常见的初盘数字个数在22—28之间,而数独爱好者们常问的一个问题是:最少给出多少个数字,数独游戏才确保有唯一解?具体地说:最少需要在初盘中给出多少个数字,使得移除其中任何一个数字该数独游戏便没有唯一解。 事实上,这个问题是数独中最有数学趣味的问题之一,并且至今仍未得到解决。但数学家们估计,这个数字很可能是1717个数字的最小唯一解初盘是由一名日本数独爱好者发现的。澳大利亚数学家GordonRoyle已经收集了36628个17个数字的唯一解初盘,而爱尔兰数学家Gary McGuire则致力于寻找16个数字的唯一解初盘,但至今仍无发现。部分数学家开始退而求其次,转而寻找只有两个解的16个数字初盘。 统计学家根据一个统计学原理曾随机地构造了大量17个数字的初盘,发现其中有唯一解的初盘只有数个未被GordonRoyle教授发现,这意味着,最小唯一解初盘问题的最终答案可能正是17:因为从理论上说,如果16个数字的唯一解终盘存在,那么每一个必将引起65个17个数字唯一解终盘的增加,而在研究中至今没有观察到这一效应。17个数的数独 望采纳谢谢

#include<stdioh>

int num[9][9], xy[9][9];

int check(int x, int y) {

    int i, m, n;

    for(i = 0; i < 9; i++)

        if ((xy[x][y] == xy[i][y]&&i != x)||(xy[x][y] == xy[x][i]&&i != y))

            return 0;

    for(i = 0, m = x / 3  3, n = y / 3  3; i < 9; i++)

        if (xy[x][y] == xy[m + i / 3][n + i % 3]&&m + i / 3 != x&&n + i % 3 != y)

            return 0;

    return 1;

}

void search(int x, int y) {

    if (x == 9)

        for(x = 0; x < 9; x++) {

            for(y = 0; y < 9; y++)

                printf("%d ", xy[x][y]);

            printf("\n");

        }

    else if (num[x][y])

        search(x + (y + 1) / 9, (y + 1) % 9);

    else

        for(xy[x][y] = 1; xy[x][y] <= 9; xy[x][y]++)

            if (check(x, y))

                search(x + (y + 1) / 9, (y + 1) % 9);

    return;

}

int main() {

    int i, j;

    for(i = 0; i < 9; i++)

        for(j = 0; j < 9; j++) {

            scanf("%d", &num[i][j]);

            xy[i][j] = num[i][j];

        }

    search(0, 0);

    return 0;

}

输入为9行9列整数,已知的整数填写对应的数字,尚待计算的未知数字填写0。

该代码的思路很简单,就是从第一行第一列开始依次填入数字,检查是否是在同一行、同一列、同一宫有没有填入重复数字,如果没有就继续填入下一个数字,如果有就返回。

虽然效率稍低,但原理简单、表述直白、易于理解,更有效率的代码是使用十字链表完成,如有兴趣可继续深入

数独游戏,是一个九宫格,每一宫又分为九个小格。在这八十一格中给出一定的已知数字,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次。

请见下图例子,事先给的数字条件越多,解题的速度越快。

扩展资料:

数独是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(33)内的数字均含1-9,不重复。

参考资料:

数独-百度百科

以上就是关于谁知道数独怎么玩全部的内容,包括:谁知道数独怎么玩、用c语言写一个简易数独的思路。要代码、数独游戏的具体玩法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9486660.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存