九宫格数独~~~~~~~~

史上最厉害的数独诞生!数独达人们敢体验吗?_非诚勿扰吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
史上最厉害的数独诞生!数独达人们敢体验吗?收藏
现在这个年代,各种游戏层出不穷,但楼主还是对益智类游戏比较情有独钟~~~而所有益智类游戏里,又偏爱数独!也记不清从什么时候开始,数独就成为楼主业余时间特别是出行时的首选必备了。手边经常会放着一本数独书,每每工作中眼睛累了或者心情烦躁的时候都会拿过来做几个。但楼主也仅仅是喜爱,因为数独对于缓解压力,放松心情还是有一定的调节作用滴!所以数独便捷、健脑、趣味的特性,使楼主对于它N多年来一直是情有独钟~~~不过玩归玩,楼主从来都木有想到过,还有人可以盲填数独!而且难道变态的境界了。。。。数独是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9 9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含1至9,不能重复。每一道合格的数独谜题都有且仅有唯一的答案,推理方法也以此为基础,任何无解或多解的题目都不合格。这种游戏和传统的填字游戏类似,但因为只使用1到9的数字,就可以锻炼你的脑筋。所以,它能够跨越文字与文化疆域,因而被誉为全球化时代的游戏。虽然只是普普通通的九个格子,平平常常的九个数字,在组合排列的变幻莫测中选择和判断,能让我们享受着山重水复柳暗花明的快乐感受,这实在是一件既让人充实,又让人满足的事情呢!可是《最强大脑》上的挑战者孙彻然,挑战项目竟然是盲填数独!之前看《最强大脑》,有选手挑战过盲拧魔方,还有填字游戏盲填,玩了这么多年的数独,楼主想都没有想过,数独也可以盲填!光听孙彻然的挑战规则,楼主就已经有点瞠目结舌了。在九九八十一个格子内,评审随机给出一个数字和一种颜色,挑战者背对大屏,将1-9的不同数字、9中不同的颜色依次盲填入81宫格内,每一行每一列每一宫的颜色都不重复并且每一个数字必须对应9种不同颜色,所有宫格填满对应颜色和数字。 孙彻然不光要在九宫格里填不同的数字,而九宫格里的颜色也必须不同,更重要的是一个数字只能对应一个颜色。。。比如1对应白,在下面所有的格子里,1都再不能对应白了。连陶子听完规则都说直接晋级吧,太难了~~~~妹纸的记忆量已经超出一般的盲填数独了。真心是比楼主想象的还要难啊!!在孙彻然挑战的整个过程中,楼主一直都在为她捏着一把汗,尤其是中间她填错了几个数字和颜色,楼主当时都心痛了,以为她要挑战失败了。。。。可后来她马上调整了,那速度和自信完全又让楼主觉得太多虑了,她是一定能成功的!不过我们看似她轻松应对了,但往往这几步的操作背后所酝酿的是一次次的头脑风暴,这也是数独那不可抗拒的魔力。对比楼主,楼主瞬间觉得自己玩的数独真是弱爆了,每次成功还沾沾自喜呢,简直是太小儿科了!虽然楼主现在已经是不需要再健脑益智的年纪,少了许多的羁绊和烦扰,希望轻松地享受工作和生活,但真心说,数独带来的魅力远非很多消遣休闲方式可以比拟的!如果你还有一些闲暇的时间,倘若你还有一点回味昨日的意趣,你对生活还有期待,那么拿起笔来,试着在九宫格中徜徉一下吧!在这看似简单的小小一方九宫格上,用自己所有的想象力、逻辑推理和创新思维,去感悟游走在成功与失败一线间的体会吧!
小小年纪,厉害啊
左三右七,戴九履一,二四为肩,六八为足
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或16439人阅读
html5&javascript(66)
游戏开发(46)
开言:本次讲一下数独游戏的开发,数独游戏是一个填数字的游戏,在一个9x9的方格内,这个9x9的大格子又可以分为9个3x3的小的九宫格,在这些格子内填写上1至9的数字,使得每一行,每一列,并且每个小的九宫格内的数字都不重复,游戏玩法简单,数字组合千变万化,所以玩起来特别有意思。在中国数独游戏似乎没那么流行,但是在日本这个游戏非常受欢迎,在通勤的电车上,经常能看到一些人一个手拿着一本数独游戏的书,另一个手拿着一支铅笔,就这么一路计算着。现在我用lufylegend.js引擎来将这款游戏搬到浏览器上来,游戏界面如下图所示。图1游戏分为两个阶段,第一个阶段,是比较简单的玩法,只需要横,竖,没有重复的数字就可以了,另一个高级阶段,还需要保证每一个小的九宫格内的数字也不重复。想挑战一下的朋友,可以点击下面的游戏链接试一下自己能通过几关。和之前的推箱子游戏一样,一共6关,游戏里也有排名系统,每过一关可以上传自己的成绩,跟大家比拼一下。制作开始一,首先,你需要下载lufylegend.js引擎下面是我在博客的lufylegend-1.6发布帖下面一步步来进入开发正题。二,游戏算法这个游戏,我们首先要解决的就是数字如何打乱的问题,因为不但要把数字打乱,还要保证这些数字被打乱后,依然符合数独的规则,然后在打乱的数字中隐藏一部分,就可以开始游戏了。我们先来看一组数字图2可以看到,在这组数字中,它的横,竖列上的数字都是不重复的。我们如何来把它的顺序打乱呢?不难看出,如果我们只把它的每一行打乱,那么它的完整性是不受影响的。同样,我们只把它的每一列进行打乱,它也是不会受到影响的。所以,要打乱它只需要以行和列为单位进行打乱就行了,算法如下。function randomNum01(lv){
var i,j,list = new Array(),result = new Array();
for(i=0;i&9;i++){
list.push([1,2,3,4,5,6,7,8,9]);
for(j=0;j.5?-1:1;});
var rand = new Array(0,1,2,3,4,5,6,7,8).sort(function(a,b){return Math.random()&.5?-1:1;});
for(i=0;i&9;i++){
for(j=0;j&9;j++){
result[i].push(list[i][rand[j]]);
for(i=0;i&9;i++){
for(j=0;j&& 0;
result[i][ran1] = 0;
ran1 = Math.random()*9 &&& 0;
result[ran1][i] = 0;
}上面的函数,我首先生成了一组有规律的数字,然后按照行和咧进行打乱,最后,随机拿掉一些数字。下面再看另一组数字。图3这种情况下,我们还要保证每个小九宫格内的数字的完整性,又要怎么做呢?在这里我有一种偷懒的算法,看下面的图4。图4我们将行和列每3个作为一个单位进行打乱,就很简单的达到了目的了,当然这只是一种偷懒的算法,如果你有更好的算法,欢迎一起讨论,我的算法如下。function randomNum02(lv){
var i,j,k,list = [],result = [],
for(i=0;i&9;i++){
list.push([1,2,3,4,5,6,7,8,9]);
for(j=0;j.5?-1:1;}).concat(
new Array(3,4,5).sort(function(a,b){return Math.random()&.5?-1:1;}),
new Array(6,7,8).sort(function(a,b){return Math.random()&.5?-1:1;})
for(i=0;i&9 i=&& result=&& push=&& list=&& rand=&& i=&& list=&& rand=&new& array=&& 0=&& 1=&& 2=&& sort=&& function=&& a=&& b=&& return=&& math=&& random=&&&.5?-1:1;}).concat(
new Array(3,4,5).sort(function(a,b){return Math.random()&.5?-1:1;}),
new Array(6,7,8).sort(function(a,b){return Math.random()&.5?-1:1;})
result = [];
for(i=0;i&9;i++){
result.push([]);
for(j=0;j&9;j++){
result[i].push(list[i][rand[j]]);
for(i=0;i&9;i++){
for(j=0;j&& 0;
result[i][ran1] = 0;
ran1 = Math.random()*9 &&& 0;
result[ran1][i] = 0;
}三,判断数字的正确性当玩家将所有被取走的数字都恢复了之后,就要判断一下他们填写的数字是否正确,是不是符合数独的游戏规则,方法很简单,就是验证每一行,每一列,以及高级阶段的时候每个九宫格内的数字,是不是没有重复,下面是代码function checkWin(){
var check01,check02;
for(var i=0;i&9;i++){
check01 = [];
check02 = [];
for(var j=0;j&9 j=&& if=&& stagenumlist=&& i=&& j=&& value=&&& 0)check01.push(stageNumList[i][j].value);
if(stageNumList[j][i].value & 0)check02.push(stageNumList[j][i].value);
check01 = deleteEleReg(check01);
check02 = deleteEleReg(check02);
if(check01.length & 9)
if(check02.length & 9)
var stage = stageMenu[stageIndex];
if(stage.flag){
return checkWin02();
function checkWin02(){
for(var i=0;i&3;i++){
for(var j=0;j&3;j++){
if(!check_mini(i,j))
function check_mini(i2,j2){
var check_arr = [];
for(var i=i2*3;i&i2*3+3;i++){
for(var j=j2*3;j&j2*3+3;j++){
if(check_arr[stageNumList[i][j].value])
check_arr[stageNumList[i][j].value] = 1;
}这个游戏很简单,以上,整个游戏的核心算法都已经解决了。四,建一个开始画面如下。图4上次我也说了,使用lufylegend.js引擎做个界面,可以说毫无难度,代码如下。function GameLogo(){
base(this,LSprite,[]);
var self =
var logolist = [[1,1,1,1],[1,2,4,1],[1,4,2,1],[1,1,1,1]];
var bitmap,logoL
logoLayer = new LSprite();
bitmap = new LBitmap(new LBitmapData(imglist[&logo&]));
bitmap.scaleX = bitmap.scaleY = 2;
logoLayer.addChild(bitmap);
self.addChild(logoLayer);
var social = new Social();
social.x = 60;
social.y = 500;
self.addChild(social);
labelText = new LTextField();
labelText.font = &HG行書体&;
labelText.size = 14;
labelText.x = 50;
labelText.y = 650;
labelText.text = &- Html5 Game Engine lufylegend.js&;
self.addChild(labelText);
labelText = new LTextField();
labelText.color = &#006400&;
labelText.font = &HG行書体&;
labelText.size = 14;
labelText.x = 50;
labelText.y = 700;
labelText.text = &/lufylegend&;
self.addChild(labelText);
self.addEventListener(LMouseEvent.MOUSE_UP,menuShow);
};这一次我用了一张图片做界面,代码就更简单了,文字显示依然是LTextField对象,使用方法请参考官方API文档。五,建一个选择画面如下。图5代码如下。function GameMenu(){
base(this,LSprite,[]);
var self =
menuLayer = new LSprite();
bitmap = new LBitmap(new LBitmapData(imglist[&menu_back&]));
bitmap.scaleX = bitmap.scaleY = 2;
menuLayer.addChild(bitmap);
self.addChild(menuLayer);
labelText = new LTextField();
labelText.color = &#B22222&;
labelText.font = &HG行書体&;
labelText.size = 40;
labelText.x = 30;
labelText.y = 700;
labelText.stroke =
labelText.lineWidth = 4;
labelText.text = &Please select !!&;
menuLayer.addChild(labelText);
for(var i=0;i&stageMenu.i++){
self.stageVsMenu(stageMenu[i]);
GameMenu.prototype.stageVsMenu = function(obj){
var self =
var menuButton = new LSprite();
var bitmap = new LBitmap(new LBitmapData(imglist[&menu_stage&]));
menuButton.addChild(bitmap);
menuButton.x = obj.x * 220 + 30;
menuButton.y = obj.y * 200 + 50;
self.addChild(menuButton);
if(obj.open){
labelText = new LTextField();
labelText.color = &#ffffff&;
labelText.font = &HG行書体&;
labelText.size = 20;
labelText.x = 50;
labelText.y = 90;
menuButton.addChild(labelText)
labelText.text = &第&+(obj.index+1)+&关&;
labelText = new LTextField();
labelText.color = &#ffffff&;
labelText.font = &HG行書体&;
labelText.size = 12;
labelText.x = 30;
labelText.y = 30;
menuButton.addChild(labelText)
labelText.text = &times:&+obj.
menuButton.obj =
menuButton.addEventListener(LMouseEvent.MOUSE_UP,function(event,self){
gameStart(self.obj.index);
labelText = new LTextField();
labelText.color = &#ffffff&;
labelText.font = &HG行書体&;
labelText.size = 20;
labelText.x = 60;
labelText.y = 40;
menuButton.addChild(labelText)
labelText.text = &???&;
}好了,游戏基本的代码已经都贴出来了。源码下面提供完整游戏源代码,想研究一下的朋友可以点击下面的连接下载。注意:该附件只包含本次文章源码,lufylegend.js引擎请到进行下载。转载请注明:欢迎继续关注我的博客
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1314210次
积分:15013
积分:15013
排名:第569名
原创:87篇
译文:27篇
评论:2250条
系统讲解HTML 5 Canvas的基础知识和高级技巧,深入剖析开源库件lufylegend的原理与使用以实例为向导,详细讲解射击游戏、物理游戏、网络游戏等各类游戏的开发思路和技巧
qq交流群:
qq交流群:
文章:27篇
阅读:170360
文章:20篇
阅读:228555
文章:48篇
阅读:676918
三国记是一款以三国时期为背景的战略类游戏,玩家可以任选一名君主,以统一全国为目标。
本游戏以三国为背景,本次更新为第一部黄巾之乱的后续剧情,续作了群雄讨伐董卓,界桥之战以及救援徐州等剧情。
本游戏以三国为背景,玩家在游戏中可以体验三国中的四个经典战役,虎牢关之战,官渡之战,赤壁之战,夷陵之战。
(5)(2)(16)(5)(1)(1)(4)(1)(2)(2)(1)(2)(1)(3)(4)(4)(5)(4)(2)(1)(1)(2)(3)(4)(5)(2)(2)(4)(1)(5)(9)(1)(1)(1)(1)(2)(1)(3)解数独?需要多少个起始数? | 科学人 | 果壳网 科技有意思
解数独?需要多少个起始数?
本文作者:冷月如霜
大到数独比赛,小到手机上的一个APP,自从诞生以来,数独已经风靡了大半个地球。数独的规则很简单,一个9x9的方格里有一些起始数字,剩下的都是空白。你需要做的是利用纸上已有数字的提示,在空格中填上1-9这些数字。填写的要求只有一条:每一个3x3的九宫格里和每一条横线、竖线上,从这9个数字必须出现而且仅可以出现一次。现有的数独软件可以让你自由选择难度,新手难度一开始提供的起始数字较多,给你的提示也多,而魔鬼难度则需要你绞尽脑汁从极少的起始数字中推理并填满剩下大片的空白。
对于这么一个数字游戏,数学家们自然也产生了浓厚的兴趣。然而数学家毕竟是数学家,在玩数独的同时,他们想到了一个问题——我们至少需要多少的起始数字,才能完成一个数独,且保证答案是唯一的呢?
“答案是17个”。今年1月1日,爱尔兰都柏林大学的麦奎尔(Gary McGuire)教授在网上贴出了他的
。他的这个答案迅速获得了其他科学家的回应。即将出版新书《认真看数独:世界最受欢迎纸面游戏背后的数学》的作者罗森豪斯(Jason Rosenhouse)就是其中一位:“他的尝试是合理可信的,我对此表示谨慎乐观”。
要直接证明至少需要17个起始数字才能解出一个数独,在数学上还是比较困难。麦奎尔教授用了一个间接的方法:证明所有只有16个起始数字的数独不存在唯一的解。然而即便是用这种方法,依然有3.4乘以10的26次方种组合等待着分析。为了进一步降低需要的计算量,麦奎尔教授引入了一个“不可避免的组合”的概念。如下图所示,红色的5和9可以互相交换位置而产生两个不同的解。为了让这个数独的答案唯一,这四个数字里必须有一个数字是起始数字,这样我们才能限定出5和9的最终位置。而这4个数字也被称为一个不可避免的组合。
在确立了所有的必须回应的组合后,计算量终于锐减到了可操作的地步。在都柏林的计算机中心,所有参与计算的CPU总共花费了700万个小时,才计算出结果——如果只给出16个起始数字,那么并不存在一个只有唯一解的数独。“唯一现实的方法就是暴力流。”澳大利亚西澳大利亚大学的数学家 罗伊尔(Gordon Royle)这样评论,“这个挑战性的问题让人们把计算的能力和数学的技巧发挥到了极限,这就像是在攀登最高耸的山峰。”
由于计算花费的时间过长(从2011年1月到2011年12月不间断地运行),所以其他人想要验算的话也需要一定的时间。上文中提到的《认真看数独》一书的另一名作者陶奥尔曼(Laura Taalman)可能对这样的结果不大满意。她的新书上周才出版,但在她看来,书中的一些内容或许已经过时了。书中表示,需要几个起始数字才能解开一个数独?这还是一个未决的问题,而解答者无疑将成为数独界的摇滚巨星。
除了用来做数独以外, 麦奎尔教授认为他的研究成果在其他领域也有其价值。他为了证明数独问题而提出的“不可避免的组合”概念也在一些已发表的基因测序以及细胞内调控网络的论文中有所应用,而他也希望他的算法可以由其他研究者发扬光大。“希望(这个算法)可以激起更多的兴趣”,麦奎尔教授这样说。
麦奎尔教授自嘲说,当他投入那么多时间去解答这个数独难题时,他闲暇时玩数独的时间却越来越少了。“数独对我来说依旧是一种很好的放松方式,但老实说,我现在更喜欢做小强填字游戏了”。
相信很多朋友平时也是数独爱好者,值得一提的是,一般报纸上提供的数独,大概能有25个起始数字,比17个还多了近一半呢。如果你还是做不出来,可不能怪出题者哟~
PS: 小组里有一些好玩的题“
”,大家可以看下。
关于对最小数独问题的最新研究,
在最近几天内将撰文详细介绍。除此之外,我们还会讲述一些有趣的数独故事。欢迎到时来看。
编译自:Nature 网站1月6日
图片:GARY MCGUIRE
(果壳环球科技观光团微博
你可能感兴趣
原来越多已知越简单?
果壳实验室主任
其实最好没有起始数,这样背一张数独答案碗里一填就OK了,哈哈哈
的回应:原来越多已知越简单?1楼玩过数独么。。。?
这17个数放在什么地方应该也有说法吧
曾经用同学的手机玩数独玩了一个通宵。。
我们这里报纸上的数独呢,好些没有唯一解的。类似上文提到的确定的位置的4个数没有定死。这样的反而比较难。
一直很好奇导读者是做什么用的....是好吃的么0 ,0
若是编程,该用什么算法?
的回应:其实最好没有起始数,这样背一张数独答案碗里一填就OK了,哈哈哈你试试,嘿嘿。
我很喜欢玩数独
有十七个已知数只有唯一解。但是,不一定已知数越少越难解。
个人还是喜欢无提示数数独,蛮有意思的~~
暴力“证明”越来越潮流了
“老实说,我现在更喜欢做小强填字游戏了”小强填字是要闹哪样……
更喜欢“数回”,就数独而言比较喜欢killer数独
最好能找出所有可能导致不唯一解的情况
的回应:这17个数放在什么地方应该也有说法吧我觉得最少17个数应该就是随机排列17个吧,不然叫最少还有限制的话就该多加几个数了。
的回应:我觉得最少17个数应该就是随机排列17个吧,不然叫最少还有限制的话就该多加几个数了。这个可不是吧,应该是按照一定顺序,原因请按照文中“不可避免的组合”继续分析,只要未给出的数据中有不可避免组合存在的,那么是解不出来的。所以,作者的说的“信很多朋友平时也是数独爱好者,值得一提的是,一般报纸上提供的数独,大概能有25个起始数字,比17个还多了近一半呢。如果你还是做不出来,可不能怪出题者哟~”也是有问题的
的回应:我觉得最少17个数应该就是随机排列17个吧,不然叫最少还有限制的话就该多加几个数了。随机会牺牲唯一性的概率,小于78个的话按照随机排列,总是有一定概率做不出来。当然,该概率会随着给出数字个数的增加而变小。
我最讨厌做这种数字游戏了,虽然我当年事数学课代表。。。。。。。
的回应:这个可不是吧,应该是按照一定顺序,原因请按照文中“不可避免的组合”继续分析,只要未给出的数据中有不可避免组合存在的,那么是解不出来的。所以,作者的说的“信很多朋友平时也是数独爱好者,值得一提的是,一般报纸上提供的数独,大概能有25个起始数字,比17个还多了近一半呢。如果你还是做不出来,可不能怪出题者哟~”也是有问题的哦~~懂了,应该是怎样让数独能解出来的数最小,而这种排列所需要的数最小,这个所需的数就是最少个数的数了。
的回应:哦~~懂了,应该是怎样让数独能解出来的数最小,而这种排列所需要的数最小,这个所需的数就是最少个数的数了。嗯,不过这种排列不是唯一的,很有意思的是:是不是有一个内核模式,所有该种最小排列都需要这个内核才能构建出?
的回应:原来越多已知越简单?orz
玩数独的时候有想过这个问题,原来这个问题这么复杂
的回应:嗯,不过这种排列不是唯一的,很有意思的是:是不是有一个内核模式,所有该种最小排列都需要这个内核才能构建出?这个又要算,比如说对角的数字互换,或者中心不变顺时针逆时针旋转什么的,啊。。头晕。
的回应:更喜欢“数回”,就数独而言比较喜欢killer数独伦家第一次看到“数回”,然后一直玩到现在。。都没有看书。。。
电影视觉导演,艺术电影制作者
手机里的数独 玩困难度的,老能遇到可供选择的数是两个。太能扩散思维了!好游戏!
的回应:有十七个已知数只有唯一解。但是,不一定已知数越少越难解。有十七个已知数也不一定只有唯一解。这句话应该说:有唯一解的数独已知数至少17个。
的回应:有十七个已知数也不一定只有唯一解。这句话应该说:有唯一解的数独已知数至少17个。这个说法比较靠谱。按照数独的定义,如果填写答案不唯一,则这个数独实际上是失败的。因为不数“独”!
蹲大的时候玩数独会便秘
显示所有评论
(C)2016果壳网&&&&京ICP证100430号&&&&京网文[-239号&&&&新出发京零字东150005号&&&&
违法和不良信息举报邮箱:&&&&举报电话:数独解题方法大全 - 全威儒 - 博客园
数独解题方法大全 - 全威儒 - 博客园
数独解题方法大全
作者:扬子活力论坛 泥瓦匠&&&&& 整理:隱讀書生
数独这个数字解谜游戏,完全不必要用到算术!会用到的只是推理与逻辑。解题方法分两大类:直观法和候选数法。
&直观法就是不需要任何辅助工具,从接到数独谜题的那一刻起就可以立即开始解题。绝不猜测。数独直观法解题技巧主要有:唯一解法、基础摒除法、区块摒除法、唯余解法、矩形摒除法、单元摒除法,余数测试法。
候选数法就是解数独题目需先建立候选数列表,根据各种条件,逐步安全的清除每个宫格候选数的不可能取值的候选数,从而达到解题的目的。
使用候选数法一般能解比较复杂的数独题目,但是候选数法的使用没用直观法那么直接,需要先建立一个候选数列表的准备过程。所以实际使用时可以先利用直观法进行解题,到无法用直观法解题时再使用候选数方法解题。
候选数法解题的过程就是逐渐排除不合适的候选数的过程,所以在进行候选数删除的时候一定要小心,确定安全的删除不合适的候选数,否则,很多时候只有重新做题了。有了计算机软件的帮助,使得候选数表的维护变得轻松起来。
数独候选数法解题技巧主要有:唯一候选数法、隐性唯一候选数法、区块删减法、数对删减法、隐性数对删减法、三链数删减法、隐性三链数删减法、矩形顶点删减法、三链列删减法、关键数删减法、关连数删减法。
一、直观法:
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
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为的可能,经过候选数的安全删除后,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、关键数删减法
在进入到解题后期,利用前面讲到的唯一候选数法、隐性唯一候选数法、 区块删减法、数对删减法、隐性数对删减法、 三链数删减法、隐性三链数删减法、矩形顶点删减法、三链列删减法都无法有进展的时候,可以考虑使用关键数删减法。关键数删减法就是在后期找到一个数,这个数在行(或列,九宫格)仅出现两次的数字。我们假定这个数在其中一个宫格类,继续求解,如果发生错误,则确定我们的假设错误。如果继续求解仍然出现困难,不妨假设这个数在另外一个宫格,看能不能得到错误。这就是关键数删减法。
关键数删减法的本质是让我们一个个去测试,逐渐排除不可能的候选数,从而求解的过程。
这种解法就暂时不举例子了
发表评论:
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&

我要回帖

更多关于 九宫格数独 的文章

 

随机推荐