数独解答器游戏,求解答

数独游戏的解题算法
本文实现了求解数独游戏的解题算法,通过排斥法、唯一法及排除法并结合递归算法达到解题目的.
年,卷(期)
机标分类号
本文读者也读过
互动百科相关词
加载中,请稍候
.客服电话
&&8:00-11:30,13:00-17:00(工作日)求高人解答这道数独,太难了.蓝笔是我自己填的,黑笔是游戏已经固定的了._百度作业帮
求高人解答这道数独,太难了.蓝笔是我自己填的,黑笔是游戏已经固定的了.
上面网址是我空间相册~填好了~等级不到2传不了图~
您可能关注的推广数独游戏的解题算法29
上亿文档资料,等你来发现
数独游戏的解题算法29
;…;4“’!’i…1i’j?…”“、7…;实用第一/智慧密集;,;数箍游i戏i的ii餐毫题黧|;{j缓;刘晓宝;摘要本文实现了求解数独游戏的解题算法,通过排斥法;法达到解题目的;关键词数独,位操作,递归调用;数独游戏是一种时下很流行的数学智力拼图游戏;3的九宫格组成,每个格子又分为一个小九宫格;如下图所示;数独游戏布局图;一、分析;为了说明方便规定一行、一
;…。’…。I、。j………jj…、ii。j…;!。|。’j4“’!’i…1i’j?…”“、7…实用第一/智慧密集,。。。…。;;,。。。…i.。。。…?i…i。;+=。。。。。,,;i。。;;…。;,。,+。;。;i,。。。…j数箍游i戏i的ii餐毫题黧|;{j缓刘晓宝摘要本文实现了求解数独游戏的解题算法,通过排斥法、唯一法及排除法并结合递归算法达到解题目的。关键词数独,位操作,递归调用数独游戏是一种时下很流行的数学智力拼图游戏。拼图由3x3的九宫格组成,每个格子又分为一个小九宫格。其布局如下图所示。其规则很简单,在已经给定的数字基础上填出空白处的数字,使得每一行、每一列、每个小九宫格中的数字包含数字l到9,且不重复。数独游戏可以很好地锻炼逻辑推理能力。数独游戏布局图一、分析为了说明方便规定一行、一列或一个九宫格为一组。在空白格子里可能会填的数字为候选项。候选项可以有多个,但不能为0个,为0视为无解。将有两个或两个以上候选项的格子称为空位。对于格子上已经确定的数称为确项。解题方法如下:1.相斥法数独游戏规定每一组中的9个数字不能重复。根据这个规则可以用组中确项来限定空位的候选项范围。例如某组中存在确项为3,则该组中的其他位不能再有数字3。2.唯一法数独游戏规定每一组中必须出现1到9各一次。根据这个规则,如果空位候选项中的某个数字在组中其他空位的候选项ii警溢篱总与捧护万 方数据中没有出现,那么这个数字就是该空位应填的数字(确项)。3.排除法如果有多个候选项,又不能用以上两种办法来确定应该填的数字,就用试探的办法,将候选项试填到该空位,然后在此基础上继续解题,如果出现矛盾(如:空位没有候选项),表示该候选项应被排除。排除法一般在解题的后期用到。当然,还有其他技巧,例如如果有n个空位的候选项相同,且候选项个数为n,则其他空位中就不能存在此候选项中的数字,这是一种广义上的唯一法。例如组中有2个空位的候选项都为“3,5”,则该组中其他候选项不应存在3或5。一般在解题过程中,首先利用排斥法来限定候选项,此时有些空位的数字就可以确定下来,之后用唯一法来确定一些确项,最后用排除法。在排除法试填某个数字后,继续沿用排斥法、唯一法、排除法的顺序来解题,直到找到矛盾或者所有数字都确定。二、设计对于每个空位都对应着其所在行、列、九宫格3个组,于是,在相斥法中,要缩小候选项范围时需要去除3个组中已确定的数。这就是说,对于每个空位的每一项需要与所有确项进行比较,直到发现此项已是组中的确项或比较完3个组不存在该确项。在唯一法中,要决定空位的某一候选项不在其他空位的候选项内,也需要进行大量的比较。为了减少比较次数,可以利用二进制位的‘与’、‘或’及‘异或’等位操作来完成比较操作。可以用二进制位串来表示一个数,建立如下关系:f(x)=2―1(其中x=1……9)如果想表示多个数,则可用如下公式表示:F(xt,xz,x3..?)=f(xt)1f(x:)lf(x3)…(其中‘l’表示位操作‘或’)…一*一sBR^PHlDS&删EPRDBR^l_…………………………………………………………………………………。。例如:F(1)=f(1)=l=0b000000叭F(3)=f(3)=4=0b00000100F(1,3,5)=f(1)lf(3)lf(5)=114l16=Ob000010101其中用‘ob’开始的位串为二进制表示。这样在表示候选项‘1,3’时就可以用二进制数0b101,而0b10110代表‘2,3,5’。用二进制位串来表示候选项时可以用一个整数(int)来代表所有9个数字,从而节省了空间。更重要的是,这样表示能够有效地减少比较次数,笔者可以在下面的实现中体会到这一点。三、实现对于每个格子设计数据结构如下:structshudu{intOl(:jntbit=}:其中ok代表此格子是否为确项,bit代表确项或者候选项的二进制表示。在初始化时,如果输入数字为0,则ok置0,bit置O;如果输入数字x为1―9,则ok置1,bit置为F(x)。这样整个数独可以用数组来实现,定义为:stmctshudushudu―aJTay【9】【9】;为了记录每组中所有的确项,定义数组如下:intshudu』ne【3】【9】;表示行、列、九宫格三种,共9个组,全部初始化为O。输人数字后,置为表达式F(组中所有确项)的值。可以规定第一维的0,1,2分别表示行、列、九宫格三种组,第二维为组的顺序值。九宫格的组内编号顺序为从左至q右,从上到下。经过前述的准备,现在可以很容易地将解数独的技巧表示为程序语言。1.排斥法空位的候选项应为数字l一9去除其所在三个组的所有确项,表示为:候选项=F(行内确项)lF(组内确项)IF(九宫格内确项)“(0blllllllll)其中“’表示位操作‘异或’。2.唯一法空位的确项可以是其所在组中其他空位候选项不包含的数字,表示为:确项=空位的候选项&(F(组内其他空位的候选项)6(空位的候选项))其中‘&’表示位操作‘与’。、3.排除法万 方数据I露◆誊//将1放景在对应的二迸狲『ll-ll:_rI位点一_j。jj。//如num2b{t19)|=》惑b_?|lOe田oOO瓯n|l:;trTl2瞬《鳓j;;≤::||_obloo警憋黪懑簪黪警_?j、.fmt.Jm<l¨『『|。I。|j||?o缈。鑫彳蠢蜜淤奢鍪淄龋,,t。|j『i|;『|;。||。√;.1_{has壹诖£t激.nHm2b浅{订)|》e笺瀵≮爹爹≯≯≥警誉渗蜜拳¨||}|j:j:;::)穗潦釜多≤j誊鬻攀美:篱鬻誊篱;≤≤誊0||||/_;,获取芝进锎装示攀薯钓玲数。强Db∞0硒分=≯3,≯,№、£哟气QQ。>21.、FIetufnSUmiii?。●一}。≮ij…0-|_,,/溅试num的三进制袭番中岔有某一位眦ha啪j}t《黪n旧,隧蛾Hr瞅um(nI_:lm&b∞≯。。//将数独中的符每对应为九富接的餐号in:tisr删“nt:}rintn}retuml;/3卜◇尊◇iz3≥_-}一0、//将数独中的别号对应为九寓梧的剔号电■謦蠢控礴与雏妒耀/枷高器糕,………’…’……………………:…………………”一…实用第一,智慧密集fntiscof(;nti,inti}(retum(i%3)}3+(j%3):}2.解数独函数//数独函数。参数1为NxN的数独数组,参数2为3xN的//确项数组Intshuduf(structshudusd―-array【N】fN】,intsd』lne【3】lN】){jntI,j,k:intr,c,n://分别对应row.coI,nine―gr’d所计算的中间值intkok://如果有改变则kok=1,否则为O{nttempjjt:stfuctshudushudu―丑rrayfNIfN】:intshudu』ine【3J【Nl://初始化memcpy(shudu―舅rray,sd―array.sizeof《structshudu)幸N木N):memcpy(shudu―』1ine,sd―J1ine,sizeof(int)¥3¥N):kok=1:while(kok==1){kOk=O://去除和组中已确定的数字相斥候选数f规定一行、列、九宫//格为一组}//相斥法for(i=0:i<N:{++)fforlj=O:j<N:j++){许《shudL』jrfayfi】fj】.ok==O){//修改当前值shudu.jrray【ilfjJ.bit=(shudu.』ine{0】fjllshudu―且jneI1】【jlshudu―门inel2】【isrow《i,{)】)“(num2bit(N+1)一1):if《shudu_array…【¨.bit==O){print“4\n第%d行,第%d列,为O.有错误!\n“.i+1.j+1}:retum一1:)'f《bits(shudu―虽rray【i】【j1.bjt)==1){shudu―量rrayI.|【j】.ok=1:kok=1:shuduJlinef01【iI=shudu―』1inefol“l【shudujrray【i】【j】,bit://row、shudu―且in8f1】fj】=shudujl{nef1】fj】Ishudujrray{il【j】.bit://coIshudu―门ine【2】【isrow(i,j)】=shuduj嘶ne【2】Ijsrow《i,j)】lshudujrray【i1【j】.bit://nlne})printf《”%5dI”,bit2num(shudujr『ay{ilfjj.bjt)):}printf(4\n’):)//选定候选数中在组内唯一出现的数唯一法for(i=O:i<N:i++){for(j=O:j<N;j++){2007.5蠢瞄藿疆霸与维护万 方数据r=O:c=0:n=O:for《k=O:k<N:k++){}f(k!=i){r=rlshudujrrayfi】(k】.bit:c=cshudujrray【k】Iil.b|t:n=nlshudujrray{isrow{i,k)1fiscol《i,k)】b{t:})r=shudujrray【il【j】.bit&(r“shudujfray【i】【j1.bit):c=shudujrray{j】【il.bit&(c“shudu―9rray【jl【i】.bit):n=shudujrray【isrow(i,j)1【iscoI(j,j)1.b.t&(n‘shudujrrayIisrow{l,j)1【jscol(i,j)1.bit)://行内唯一.f(bits《r)==1&&shudu―虽rrayfillj】.ok==O){jflhas―bitfshudu―且jnefO】fj】,r)}Ih8s―bjt《shuduJljnefl】fj】,r}lhas―bit(shuduJline【2l【isrow(i,j)】,r)){retUm一1:)shudu―array【il【J】.bit=r:shudujrray【il【jI.ok=1:kok=1:shudu』ine【0】fi】=shudu』inefO】【i】IshudujrrayfiJfj】.bit://rowshudu.』1ine【1】{j】=shuduJline【1l【j】Ishudu―array【{】【j】.blt://colshudujline【2】【isrow(i,j)】=shudu―门ine12l【isrow(i,j)】lshudujrray【i】【j】.bit://nine)//列内唯一if(bjts(c)==1&&shudu―蠹rray【j1[j1.ok==O){if{hasjit《shudu―j1Ine【O】【jl,c)lhas_bit(shuduJline111【mc)|lha咄it(shudu_njnef2】fisrow《j,i)】,c)){return一1:)shudu―array【jJfiJ.bit=c:shudu―坌rfaV【jlfil.ok=1:kok=1:shudu.』1inefO】fj】=shudLL_njne【OJfj】|shudujr阳y川Ii】.bit://rowshuduJline【1J【i】=shudujline【1】fi】Ishudu―array¨】…,bjt://coIshudu』ine【2】【isrow(j,i)】=shuduJline【2j【isrow{j,i)】jshudu.鼻rrayljl【i】.b.t://nine)//九宫格内唯一if(bits(n)==1&&shudu―坌rr8yfisrow(i,j)l【isco}(i,j)】.ok==O)(jf《hasjit(shudujline【O】【isrow《i,j)】,n)lhas_bit{shudu―nine【1l【iscoI(1.j)】.n)lhas_bit《shudu』ine【2】…,n)}{return一1:)shudujrrayfisrow《i,j)】【iscojfj,j)】.b;t=n:shudu.jrray【isrowIl,j)l【iscoI(i,j)1.ok:=1:kok=1:BR^PHlCS&肌啊EPROBR^啊shudu』ine【O】【isrow《i,j)】=shudu』lne【O】【isrow《i.j)】|shudujrray【isrow(i.j)l【iscol(j,j)1.bit://rowshudujline【1】【iscol(i,j)】=shudujline{1】liscoI《i。j)】Jshudu―array【jsrow(i.j)l【iscol(j,j)】.bit://coIshudujline【2】【j】=shudu―且ine【2】{i】lshudujrray【}srow(i,j)Jfisco…,j)】.bit://nine)}}printf(”===========\n”):}//endwhife//检查是否所有的格子都已经填数kOk=0:for{i=0:i<N:i++){If(shudu_nine【O】【iJ==《num2bit(N+1)一1)){kok++:))//所有的格子都已经填数if(kok==N){retum1:)//排除法for(i=0:i<N:i++jffor(j=0:j<N:j++)(if(shudujrray【i】【j】.ok==0){for(k=1:k<=N:k++){if(has_bit《shudu―耍rray【i】fjJ.bit,num2bit(k))){//尝试其中~个数,忽略其他数.保存当前的数temp―bit=shudu■rray【i】【j1.bit:shudu_ninef0】【iJ=shudu_nine【0】【i】fnum2bft(k)://rowshudu.门jne【1】【j】=shudujline{1】【j】Jnum2bit《k)://coIshudujline【2】fisrow(i,j)l=shudu―』1ine【2】【isrow{i.j)】Inum2bit(k)://nineshudu―array【i】[j】.ok=1:shudu―arrayfiJ【j】.bit=num2bit(k):prfntff4============\n”):printf(4尝试:第%d行,第%d列.%d中的%d\n”,j+1,j+1.blt2num(temp_bjt),k)://getch()://递归调用if(shuduf(shudujrray.shudu―J1ine)==1){retum1:)//尝试不成功,恢复当前数shudujrray【il【j】.bit=temp_bit&(num2bit(k)“(num2bit《N+1)一1)):shudujrrayfil【j】.ok=O:shudu』jne【O】Ii】=shudu_nine【0】I}J&(num2bit(k)‘《num2bit(N+1)一1))://rowshudu―且inef1】fjl=shudu.且inef1】fj】&(num2bitlk)‘(num2bit(N+1)一1))://coIshuduJline【2】I{srow(i,j)】=shudu―J1ine【2】【isrow(i,j)】fnum2bit《N+1)一1))://nine万 方数据j}jf(shudu―array【i】【jJ.b.t==O)fretum一2://无解))})retum1:}3.主函数main()intmajn(void){inti,j,number:intrc:structshudushudu―丑rray【Nl[N】:intshudujline【3J[N】://初始化memset(shudu―且}ne,O,sizeof(int)术3幸N):pr}ntf(”下面要求输入数独的数字1―9,如果没有数字以O代替.每行9个数字.以空格分开.\n\n”):for(i=O:i<N:i++)f研ntf(4输入第%d行:”,i+1):for《j=O;j<N:j++)fscanf(4%d”,&number):if(number>0)(shudu―array【i】【j】.bit=num2bit(number):shudujrray【i】fjl.ok=1:)else(shudujrray…….bjt=O:shudujrray【{】fj】.ok=0:)if(has_bit(shudu』ine{O】【il,shudu_盆rrayfilfjJ.bit)|Jhasjjt(shudu_nine【1】…,shudujrray…….bit)||has上jt(shudu』ine【2】【isrow(i.j)l,shudujrray…fj|.bit)){叫nt“”输入有误!\n”):return一1:)shudu』1inef0】【iJ=shudujline【Oj【ilshudu―array…….bit://rowshudu―nine【1J【j1=shuduJljne【1】【j】lshudujrray…….bit://coIshuduJline【2lfisrow《{,j)】=shudu―门ine【2】【;srow《i,j)Jshudujrrayli】【jJ.bit://nine}p阳tf(”有解\n”):if(rc==一2){printf(’没有解\n”):O:(收稿日期:2007年3月16日)电毯缩翟技巧与雏护≮塑≥,电毯缩疆器量惑黔)rc=shuduf(shudu―array,shudu―J1ine):if(rc==1){)else)retum)&(num2bit(k)“数独游戏的解题算法作者:作者单位:刊名:英文刊名:年,卷(期):被引用次数:刘晓宝电脑编程技巧与维护COMPUTER PROGRAMMING SKILLS & MAINTENANCE2007,(5)2次 引证文献(2条) 1.肖华勇.田铮.马雷 数独基于规则的逐步枚举算法设计[期刊论文]-计算机工程与设计 .李盘荣 &数独&游戏的算法研究与实现[期刊论文]-电脑知识与技术 2008(26) 本文链接:http://d..cn/Periodical_dnbcjqywh.aspx授权使用:武汉大学(whdx),授权号:9d85f276-ee13-48da-9a5e-9ed9下载时间:日包含各类专业文献、各类资格考试、专业论文、文学作品欣赏、应用写作文书、行业资料、高等教育、生活休闲娱乐、数独游戏的解题算法29等内容。
 解答一道数独问题数独游戏的难度等级分析及求解算法研究 2――数独难度等级 2 数独难度等级数独游戏发展至今,在数独爱好者的积极探索下,求解数独的算法众多,有 矩形...   数独游戏题目_教学案例/设计_教学研究_教育专区。 今日推荐 180份文档 ... 一道寒假数独游戏解题过... 44页 免费 _数独_游戏的算法研究与... 3页 ...  在线互动式文档分享平台,在这里,您可以和千万网友分享自己手中的文档,全文阅读其他用户的文档,同时,也可以利用分享文档获取的积分下载文档  第三章:数独游戏的解法数独游戏常见求解方法依解题填制的过程可区分为直观法与...直观法有以下几种常用的算法:单元唯一法、单元排除法、区块排除法、唯一余数法...   数独游戏题目_军事/政治_人文社科_专业资料。 今日推荐 88份文档 ... 一道寒假数独游戏解题过... 44页 免费 _数独_游戏的算法研究与... 3页 ...  龙源期刊网 .cn 数独游戏的难度划分及创建算法设计 作者:王新鑫 李星 钟宁 来源:《计算机光盘软件与应用》2013 年第 18 期 摘要:将“...   数独游戏题目_学科竞赛_小学教育_教育专区。数独题目今日推荐 88份文档 ... 一道寒假数独游戏解题过... 44页 免费 _数独_游戏的算法研究与... 3页 ...  算法课程设计题目: 数独游戏 (一) 游戏介绍:数独游戏非常好玩,可以训练玩家的...3.每个数独游戏都可根据给定的数字为线索,推算解答出来,而 且每个数独游戏的...   数独问题高效算法研究与实现_互联网_IT/计算机_专业资料。数独问题高效算法的研究与实现 摘要:数独益智游戏(sudoku)是近年来全球流行的一种智力 游戏。本文通过...数独游戏的解题算法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
8页免费18页免费44页免费2页¥3.003页免费10页免费2页免费4页免费2页免费7页1下载券
喜欢此文档的还喜欢21页免费25页免费5页免费100页免费54页免费
数独游戏的解题算法|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢上传时间:
更多有关axure高保真原型实战视频请关注
56官方微信
扫一扫发现精彩}

我要回帖

更多关于 数独游戏在线 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信