谁能给我通俗易懂地讲解一下,数独讲解视频游戏里的高级技巧——链,三链数,四链数等等

数独游戏智能解法(2)
&&& 代码解读
在看了我在protel下画的那个巨龊的框架图后,相应对该程序有了个大致的认识。那这里,我就仔细讲一下整个流程。
首先,整个代码中,维护了四个十分重要的全局变量:
&&& static int
ArrayInfo[9][9];
&&& static bool
PossibleFormArray[9][9][10];
&&& static int
LegalArrayInfo[10][9][9];
&&& static bool
LegalFormArray[10][9][9][10];
这里详细解释一下,第一个数组代表的是当前九宫格81个格子里都填的是什么,如果某个格子已经通过人工筛选模块算出(图1的宫格2),或者系统导入时该格子就存在(图1的宫格1,宫格5,宫格9),那就填充相应的值(1到9嘛),如果这个格子还没有被解出来,那么填充0,表示该格子信息未知。但是要注意的是,这个ArrayInfo数组的信息并不一定正确,因为随机选择模块会改变该值,而随机选择模块并不一定能做出正确的选择。所以,现在第三个数组就有了它存在的意义,每当程序进入到随机选择模块,那么它就将当前ArrayInfo复制到LegalArrayInfo中,等发现该次随机选择有问题时,可将LegalArrayInfo中保留的正确信息返回到ArrayInfo中。而LegalArrayInfo中的数字10就代表了该代码最大的随机选择深度(或者叫层吧)。
然后就是PossibleFormArray,这个数组代表当前九宫格81个格子里每个格子都有哪些数字可填。比如说某格子只可能选择2,6,7三个数字,那么PossibleFormArray[x][x]='1
0&1 0 0&0 1 1 0
0'。第一位可以看做使能位,1表示可选,0表示该宫格已经解出,即在ArrayInfo的对应位置已经有非0值。剩下的9位也好理解,依次代表1-9这9个数是否可填,可填标1,不可填标0(就比如图1的宫格3)。第四个数组的含义类似于LegalArrayInfo,我也就没必要做过多解释。
接着是初始化模块,程序通过LoadAIFromFile()函数(这个函数的AI其实就代表ArrayInfo)将txt文件格式的数独初始信息写入到ArrayInfo中,然后在MainInit()函数中更新了PossibleFormArray,并且为随机模块需要使用的数据信息,包括DoublePoint,HasDouble,HasTriple,RandomObject这些结构体数组,进行初始化工作。关于随机模块的这些数据,马上就讲到。
理所当然,就是人工选择模块。其实所谓的人工选择就是将人脑解数独题目的常用方法变成相应的函数,然后按照合理的顺序将这些方法函数组织在一起,使之能高效运转而已。具体到这里,我们用到的,或者更直接一点来说,以我现有的能力能编写出来的人工方法有这些:唯一数法,隐含唯一数法,数对法,隐含数对法,三链数法,隐含三链数法,四链数法,隐含四链数法(其实我也想过其他的三种解法,只是感觉过于复杂,故放弃)。至于这些方法具体是什么意思,还是参考前文中给出的那个连接,讲得十分清楚了。
人工选择模块的每个方法函数如何实现的我不在这里讲,后文会给出代码,这里只介绍下如何将这些代码高效的运转起来,并让该模块能协调其他模块一起工作。说思路前,先介绍下这些方法函数的一些特征,但凡某个方法函数得到了应用(也就是说,这个函数成功滴排除了PossibleFormArray中的某些可选值,甚至是直接确定了ArrayInfo中的某值时),立即成功返回1,否则返回0。现在,说思路:在人工模块的主递归中,一旦某个方法函数成功返回1,那么立即跳回到主递归开头,并更新PossibleFormArray和ArrayInfo,然后继续通过方法函数进行计算和筛选。值得注意的是,每个方法函数开始前,都会通过AllFilled来检测ArrayInfo是否已经填满,换言之即是否已经解出该数独,如果是,立即跳出人工选择模块,输出结果,如果不是嘛,那当然继续了。还有一个很重要的地方,一旦人工选择模块主递归走完都没能解出该数独,那只能返回0,代表人脑暂时无能为力,需要随机选择模块工作了。
当然,随机选择模块也不是瞎蒙的。前面说到的HasDouble,HasTriple,DoublePoint,RandomObject这些结构体数组不是吃干饭的。具体来说,这些结构体分别代表着存在二链选择的情况,存在三链选择的情况,存在某PossibleFormArray中只有两个可选值的情况和当这些情况被选择之后的随机结构体,以及这些情况的具体信息,包括它们出现在哪个宫格,包含哪几个可能值。重点强调以下RandomObject。它是在随机模块选择了前三个结构体数组的某个元素(比如图2中对应的第三,第六个宫格中的1和2,如果我蒙宫格3为1,那么宫格6就为2,就是这么弱叉的思想。)后,将选择的信息添加到一个RandomObject元素中。这样做是出于这么一个目的:一旦随机选择的这次猜测是错的,那么再次进入随机模块时,可以调用RandomObject来重新选择(还是图2的例子,如果之前说的那个宫格3蒙1,宫格6蒙2是错的,这次我反过来不就OK了)。
最后就是随机模块了。先说一下,三个结构体在随机模块的选择次序,HasDouble&DoublePoint&HasTriple
然后可以直接说思路了。流程大致是这样的:如果输入值为1,表明初次进入随机模块或者经过随机模块的选择之后仍然不能解出该数独。那么首先要将PossibleFormArray和ArrayInfo保存到LegalFormArray和LegalArrayInfo中,这里要注意后两者的深度值,有个全局变量记录的,具体可以参见代码。然后,从HasDouble,DoublePoint,HasTriple中按照优先级选择并判断数据的有效性(进行数据检查主要是怕人工选择模块的再度选择导致这些参数失效)。当数据有效,也就是确定选择该随机数据时,函数将该数据的所有信息保存到RandomObject数组中,更新PossibleFormArray和ArrayInfo,重置HasDouble等随机数据,最后返回到人工模块。而如果输入值为0,表明因为该随机模块筛选的值有问题,那么找到该次随机对应RandomObject元素,然后根据RandomObject重新选择,最后返回到人工筛选模块。值得注意的是一旦RandomObject元素所代表的选择可能全部失败,就要退回到上级RandomObject元素。这里涉及到递归的问题,具体可以参见代码。
这就是基本思路。。。。写吐血了。不晓得能不能明白。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。  出题之前先解释什么叫珍珠题:
  标准数独按所需解题技巧来划分的话可分为:基础题、进阶题。
  基础题就是全部解题过程通过基础解法就可完成。基础解法有摒除法、余数法等。
  1.摒除法:透过数字对某单元进行摒除,找单元内可填该数的唯一空格,所得到的解称为摒除解,英文叫 Hidden Single
  2.余数法:对某空格进行点算,并删减相关单元已经出现的数字,若该空格仅剩下一个数字可填,就得到了唯余解,英文叫Naked Single。
  进阶题就是解题过程需要通过进阶解法的协助方可完成者。第一解若是需要进阶解法协助者就称为珍珠题(pearl)。解珍珠题的重点不是贴出最后答案而是要描述第一解的解题过程,如果用试数法解珍珠题则违背了设计者的本意,不利于解题技巧的提高和解题思路拓展。
楼主发言:4次 发图:3张 | 更多
  百度来的关于进阶解法:  进阶解法包括:区块摒除法(Locked Candidates)、数组法(Subset)、四角对角线(X-Wing)、唯一矩形(Unique Rectangle)、全双值坟墓(Bivalue Universal Grave)、单数链(X-Chain)、异数链(XY-Chain)及其他数链的高级技巧等等。已发展出来的方法有近百种之多。  来做题吧,亲们~
  有点理解不能,在我看来还是那种数独啊
  用数组法用了很多次,才填出来了第一宫里的5 9
  初始图如下    最终结果如下,图片中的红色小字是删除了的  
  呃,上边两个图发反了,不过应该能看明白,再发一下解法吧,我的好长啊  1. 用数组法r4c(456)是145,所以r6c4,r6c6里不可能有145,从而得到r6c4+r6c6里是38;  2. 继续用数组法得到r6c3里不可能有38,所以r6c3可能数是14;  3. 在第4宫里继续用数组法,r5c2+r6c3是14,所以r5c1,r5c3里不可能有14,从而得到r5c1+r5c3=38;   4. 同样用数组法,r16+r3c6+r6c6=238,所以r9c6里不可能有238,从而得到r9c6可能是45;  5. 继续数组法,r9c(1,4,6,7)=4568,所以r9c3+r9c8只可能是12;  6. 继续用数组法,r1c3+r6c3+r9c3=124,所以r2c3=5,r8c3只可能是38,可以删除第1宫及r2行的其它5;  7. 可以继续用数组法,r2c8+r6c8+r9c8=129,所以r1c8只可能有67,r3c8只可能有56,r5c8只可有57;  8. 对r3行用唯一数候选法或者数组法可以得到r3c1=9;删除第一宫及c1列的其它9;  9. 用唯一矩形解,r5c1+r5c3+r8c3都只有38,但r8c1里有3568,根据唯一矩形解册除法,r8c1里不可能有38,只可能是56;  10. r1c2+r1c3里一定有一个2,用区块摒除法,r1c6,r1c9里不可能有2;  11. 继续对c6列用数组法,r1c6+r6c6=38,所以r3c6里不可能有3,从而得到r3c6=2;  后边就很直观了......
  用photoshop来做这样的题真累啊
  还有一个数忘记填上了,补上  
  呃,又发错了,再补  
  呃,刚才又查了一下三链数法的定义,似乎我上边解题过程里的某些地方用的不是数组法,而是三链数、四链数删减法
  NO.2  
  不容易啊,各种删除,还一个数字也没填出来
  初始填充如下    最终结果如下,最重要是的用三链行删除法删除下图里的红色5    写上解法吧:  1. 三链数法, 在第8宫里,r9c4+r9c5+r9c6=237,所以此宫的其它格里不可能有237  2. 区块摒除法,r5c6=9且r9c1=9,所以第8宫的9一定在r8c4或者r8c5里,从而可以删除r8c9里的9的可能性;  3. 区块摒除法, r4c7=2,所以第三宫的2在r6c4或者r6c6里,从而r4c2里不可能有2;  4. 唯一矩形法,r1行与r8行的9都只可能在c4 c5里,由9构成一个唯一的矩形,所以可以确定r3c4里不可能有9;  5. 区块摒除法, r3c2=6并且r9c8=6,所以第三宫里的6只可能在r2c7或者r2c9里,从而可能确定r2c4与r2c6里不可能有6;  6. 唯一矩形法,r3行与r7行的3只可能在c1与c7列,形成行唯一矩形,所以可以删除c1与c7列里除去矩形4个顶点的3;  7. 数组法,c7列,r2c7+r5c7=56,所以r3c7与r7c7里不可能有5;  8. 唯一矩形法,c7与c9列6只在r2与r5行出现,形成矩形,所以可以删除r2与r5行除矩形顶点之外的6,从而可以删除r5c1里的6;  9. 区块摒除法, r6c1=5,则第5宫的5一定在r4c4或者r4c6里,从而r4c8里不可能有5;  10. 三链行(百度只能百度到三链列)删减法, 观察r3,r4,r7行,这三行里候选数5公在c4,c6,c9列里出现;可以确定这三列里的5只可能出现在r3,r4,r7行,从而可以删除这三列里其它行里的5的可能性;  这之后就简单了~~~  第10步找了很久啊,眼都花了
  NO.3  
  搞不定了啊
  楼主,一定要等我解出来!!!
  再来看看,楼上的朋友解出来了没呢
请遵守言论规则,不得违反国家法律法规回复(Ctrl+Enter)数独解题方法大全_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
数独解题方法大全
&&数独解题方法 自己整理
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩9页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢账号 电子邮箱地址
记住登录状态
还没有33IQ账号?
通过社交网站直接登录
条@我的评论,
条新私信,
条新评论,
删除理由:
请不要发布与本小组主题无关的内容。
高阶数独技巧——“链”和三链数删除法
有人喜欢用直观方法解数独,有人喜欢用各种技巧,一步步抽丝剥茧享受推理的过程。而楼主正是介乎于两者之间,喜欢去get各种技巧但实际操作时想不想的起来完全要看天意的那种人,为了随时可以酷(zhuang)炫(bi)一把,高级数独技巧那可是必备的!骚年,真的不来一发吗?链“链”是数独高级技巧的核心,它表示两个命题之间的关系。其中的“命题”相当于一个“判定”,例如假设“A3取值为5”、“A7取值为5”,在条件不充分的情况下,这(两个)个判定可为真,也可为假。而此时,A3和A7之间的关系,我们就称之为“链”。单链分为强链和弱链。强链:某行、列或宫只存在2个某候选数,这两个数就构成强链,两数非真即假。这里用红线连接表示。❤假设下图B4和B6都分别只有(且只在这2格中有)3和4两个候选数,则这两格构成了强链(非真即假)——B4为3则B6为4,或者是,B4为4则B6为3——换言之,B4取3为真则B6取3为假,在“3”这个命题上,强链两端取值必为一真一假。弱链:某行、列或宫存在3个或3格以上某候选数,这些数就构成弱链,其中一个为真则其余为假;其中一个为假则不能判断其余的真假。这里用蓝线连接表示。❤上图中G行,G2、G5、G8各有(且只在这3格中有)567三个候选数,则这三格之间构成了弱链——当G2取值为5时可排除G5、G8取5的可能,但当仅知道G2取值不为5时,无法确定5在剩余两格中的位置。一些强链(红色连线)、弱链(蓝色连线)的例子:觉得上面说的太简单了,简直毫无压力的请往下看↓根据强链两端数字“一个为真另一个为假”的特性可以引申出某些三条连续单链组有排除候选数的情况。 &“强-强-强链”和“强-弱-强”链都可以导致“长链”两端数字交叉处格中的该数被删除。(红线为强链,蓝线为弱链)“强-强-强链”由于链两端数非真即假的特性,标成红蓝(x和x)两组,红为真则蓝为假,反之亦然。连成“长链”后,“长链”两端也是一红一蓝,则二者之间肯定有一个是真,所以排除掉共同区域格(橙色格)中的x。 “强-弱-强链”虽然不像“三强”中数字真假那么分明,但注意弱链(第一宫)的两端:①如果弱链一端为真,那么另一端则为假,而这两端的数字分别连接强链,所以导致“长链”两端数同样是一真一假。②如果弱链两端均为假,则长链两端数都为真。综上:同样排除掉共同区域格(橙色格)中的x。 &❤所以可以看出“强-强-强链”与“强-弱-强链”在排除两端数字交叉区域数字的效果上是“等价”的。本文是高阶数独的入门篇,想看之前的「入门版」「进阶版」技巧的请自行点击下方!——————————图片来自百度贴吧。「入门版」数独介绍:数独常识介绍、排除法的使用: 数独唯余法的使用: 数独数对(数组)法的使用: 「进阶版」数独攻略:数独区块、显性数对(数组)删减法的使用: X翼删减法、剑鱼删减法的使用: xy-wing删减法、xyz-wing删减法的使用: 唯一矩形删减法的使用: bug删减法的使用: &「高阶版」数独必备:Turbot Fish删减法的使用: Y-wing删减法: & &Remote pair删减法: & & 可以不收藏不转发,可是连赞❤都不点,这样真的好么?
姑凉不要谦虚了,你也是要掌握得很好才能更文啊(明明是个高手还要装
对啊!!以前很多都是凭直觉之类的,更了这个系列文才发现还有好多东西都不知道
不错嘛~还能笑的出来
能看懂我在说什么就好~
因为我懒的找啊
怎么这期没出题?
然并卵.基本没啥用.
对,聪明格有时只有一种运算符号(那是最简单的),最难的四则运算,当然现在游戏里我玩过,里面6*6的很轻松,到9*9就难了,要买书,网上看不见的应该
不是应该有加减乘除么?
对那就是聪明咯。。。
我今天跑去做了下聪明格~但是我好像进错地方了,只看到4*4、5*5、6*6的,还都是加法。。。
玩家:201278人
益智游戏通常以游戏的形式锻炼了游戏者的脑、眼、手等,...
登录33IQ,提升智力水平,让你越玩越聪明!
33IQ v4.26.90.85
Copyright & 2008- All Rights Reservedof的用法小技巧,求通俗易懂的讲解-告诉我一下with的所有用法,通俗易懂最好 _星空五金网
你的位置:&&&文章正文……
告诉我一下with的所有用法,通俗易懂最好
of的用法小技巧,求通俗易懂的讲解
of的用法小技巧,求通俗易懂的讲解
如标题,求通俗易懂of 的用法小技巧,谢谢!
我是大学已经过了六级的学生,下面的解答你可以参考一下。of的用法小技巧1.归属型(左边的小,右边的大)the legs of the table.桌子上的脚2.归属型 (左边是照片,右边是归属是谁的)a photo of my girlfriend 我女朋友的照片(照片上的人是我的女朋友)3.限制型(左边的少,右边的多)One of my friends has gone abroad. 我的一个朋友出国了。举了几个例子,of就是用来限制的,语句很难表达,用多了就会明白其中的含义,一句讲明白,就是限制和归属。4.其它习惯用语a cup of tea (一窢範促既讵焕存唯担沥杯荼)two cups of tea(两杯荼)注意这里,如果是一杯以上,后面的tea不用加复数,只有cup加复数。5.关于更多的英语学习技巧。
我个人觉得“年华的空间”里面的日志还是不错的,没有过六级之前天天都泡在他的日志里面,获得了很多书本上没有的英语学习知识,确实值得英语学习者借鉴学习。“年华的空间”。百度一下就可以看到在页面上的第一条了。6.关于尾声学英语靠的是坚持,不能三天打鱼两天晒网,只要坚持就会看到希望。如果不坚持,一辈子(100年)都学不会,如果坚持,半年后的英语就已经很厉害了。加油,祝你成功!
of一般表示“……的”,比如这个镇的人口,the population of this cit窢範促既讵焕存唯担沥y. 有水和面包的一顿饭,a meal of bread and water.
1、the + 名词+ of
...的 the east of city 城市的东部
F 食指要用侧面去按,食指略微倒向琴头,用力,一开始会很难出声音,都比较正常,如果方法对了,就坚持下...……
win+R就可以调出“运行”。 快捷键,又叫快速键或热键,指通过某些特定的按键、按键顺序或按键组合来...……
你好,我加了你QQ,邮件可能发送起来比较慢,我用QQ传给你就是了。箫的教程我还是有一些的,比如箫吹奏...……
人脑对固定姿势有个记忆固化功能。 就是常常保持一个姿势,大脑就会把他记忆下来。 变成固定的模式。 就...……
对初学者来说,横按难按,但这是每个学吉他的人避不开的门槛,很多半途而废的都是过不了这个门槛的原因。如...……
是的呀。。。……
中投 这是前锋的王牌,SF更是精于此道。作为一个F,你一定要找到自己的投篮点,所谓的投篮点就是命中率...……
小弟不才.玩了2年之后才知道如何一次性把临时打满.现在准备卖号了.所以将这个秘诀公之于众#24. 其...……
纯粹的几率问题,没有啥技巧。还有你150的临时F怎么可能打出152的伤害,除非你朋友帮你打低了,自己...……
大横按,初学者必须攻破的和旋,一开始是很困难,没什么捷径可言,这里可以和你分享一下经验,我觉得这个方...
五金者,指金、银、铜、铁、锡五项金属材料之称,五金材料之产品,通常只分为大五金及小五金两大类。大五金指钢板、钢筋,扁铁、万能角钢、槽铁、工字铁及各类型之钢铁材料,小五金则为建筑五金、白铁皮、锁类铁钉、铁丝、钢铁丝网、钢丝剪、家庭五金、各种工具等等。就五金之性质与用途,应分钢铁材料、非铁金属材料、机械机件、传动器材、辅助工具、工作工具、建筑五金、家庭五金等八大类
Copyright & 2017
相关信息仅供参考,不对其真实性准确性有效性作任何的保证,有事情请发邮件到xkynjf#(把#换成@)

我要回帖

更多关于 6宫格数独规律表讲解 的文章

 

随机推荐