求AS3.0 FlashBulider 里九宫格数独题目的解法

1.挑选商品 → 2.放入购物车 → 3.结账 → 4.等待收货 → 5.完成
九宫格数独游戏的数值分析解法
产品编号:577694
该商品已经下架。
作  者:
出 版 社:
出版时间:
版次/开本:
页  数:
定  价:
丛 书 名:
1942年4月出身上海市青浦区蟠龙村。1956年颜安初中毕业;1959年青浦中学高中毕业;1964年以优异成绩毕业于北京工业学院飞行器结构设计专业;大学毕业分配到二机部九院即北京“九院”青海“221厂”及绵阳“中国工程物理研究院”工作。研究员,硕士研究生导师:2004年4月退休,后又延聘2年。
1987年6月前从事产品环境试验设计与分析,期间1979年9月~1981年7月到职工子弟学校任高中数学教师两年。
1987年9月~1996年5月从事并完成产品总体结构小型-轻量化设计研究。期间,根据这项研究成果,完成了1995年秋在国家军事博物馆举办的“八五国防科技成果展”的用代用材料加工1:1参展模型的主设计;又完成了参试模型壳体的主设计。
1996年6月~2006年4月从事常规新品的开发研制;期间2000年~2004年兼职带硕士研究生工作。
获国防科工委科技进步奖与解放军总装备部科技进步奖二等奖、三等奖各数项。第1章
数值分析解法简述
格号、行号、列号与小宫号,单元与单元号
用数组与方阵表示
用于归0处置及格值转化的定理
使用手工图解作业的数值分析解法
手工数值分析解法对九宫格的衍生扩展
手工图解方法的归0处置及格值转化
用手工图解作业过程的几个算例第3章
有关作业过程的计算程序设计简介
扩充的单元约束归0处置定理
不同难度作业题目分类
对于需要预设置格值作业题目的讨论
程序目录及说明第4章
有关九宫格数独游戏题目的研究
出题的基本方法——从作业结果反求题目
产生大量作业题目的几种变换方法
有关作业题目总数的粗略讨论附录1
一个算例的分步详解附录2
36个作业结果及用它们产生的作业题目附录3
作业题目1—2304
工 作 日 :&&9:00--19:00
咨询时间:9:00-21:00
联系邮箱:
传真:021-0
CopyRight & 沪江网 2015&
购物车共有件商品
操作成功,3秒后自动关闭
【沪江网校】新版日语入门至高级【0-N1签约保过11月名师通关班】( 开班)求九宫格数独答案?0代表空格_百度知道
求九宫格数独答案?0代表空格
提问者采纳
总共有25个解0123456789101112131415161718192021222324
提问者评价
呵呵,楼上的好厉害,还有对不起其他的朋友啦,我有两个数据有错了,采纳第23个解
第一题的答案是 738162 第二题的答案是 175263
检验看一下,应该没错
其他类似问题
九宫格数独的相关知识
按默认排序
其他3条回答
有多解,下面是其中两解一:597 326 148 423 581 679 681 497 235 975 243 861 836 175 924 142 968 753 219 754 386 358 612 497 764 839 512 二:597 326 148 423 581 679 618 497 235 975 243 816 836 175 924 142 968 753 269 754 381 384 612 597 751 839 462
0400000 ,题目无解,第三行,第四行,在第四列都出现了4
不好意思,第四行应该是004300
不对啊,我做了几步发现是多解啊,请核对数据
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁您所在的位置: &
算法实践:数独的基本解法(1)
算法实践:数独的基本解法(1)
我们以Visual Studio为例,它有Stack这个类,实现了栈的基本操作。有两个栈的方法:Push(压栈)――把数据写到栈里面;Pop(出栈)――把数据从栈里提出来,并删除栈中的数据。
数独(Sudoku)是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9&9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含1-9,不重复。 每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的。
如下图所示,就是一个数独的题目
关于数独的详细介绍,参看&&
数独的基本解法就是利用规则的摒弃法
每一行称为数独的行,每一列称为数独的列,每一个小九宫格称为数独的宫。数独的基本规则就是每一行、每一列、每一宫中,1-9这9个数字都只出现一次。
用(行,列)表示上图的单元格,例如(1,1)表示第一行第一列的单元格,(2,4)表示第二行第四列的单元格
如上图,每个空白单元格中能填的数字都是有限制的。
例如:(1,1)就只能填7和8;而(6,4),只能填8;
那些只能填一个数字的空白单元格,我们称之为唯一数单元格,上图中(6,4)就是唯一数单元格
解题的顺序,就是从唯一数单元格开始,由于唯一数单元格只能填一个数,故先在这个单元格里填数。在这个单元格里填数,由于规则的定义,那么这个单元格所在的行、所在的列、所在的宫的其他单元格就不能再填这个数了。这些单元格能填的数的可能性就少了。有可能会产生新的唯一数单元格。
在相当的一些的数独题目中,从唯一数单元格开始填数,不停的在唯一数单元格填数就可以把数独解出来。
如果在解题的过程中,发现某些空白单元格没有数字能填这样的单元格称之为无解单元格,那就说明:要么这个数独没有解;要么之前的解题过程有问题,需要返回检查之前的解题过程查看。
但是还有不少的数独的题目,在解题的过程中,在还有空白单元格的情况下,却找不到唯一数单元格,也就是意味着每个空白单元格中能填的数字至少有2个。我们称之为无唯一数单元格的状况
这个时候怎么办?我们找到其中一个可能数最少的空白单元格(这个没有定论,可以是可能数最少的空白单元格;也可以是第一个空白单元格;也可以是可能数最多的空白单元格,选哪个空白单元格对后面的解题是否有影响,没有证明过,不好妄下定论。凭感觉选可能数最少的空白单元格是最好的选择),由于能填的数字不止一个,先把当前的状态保存起来,再在能选的数字中选择一个数字填写(从小到大选择),然后继续求解下去。如果能解出最后的结果,说明当前的选择是正确的;如果后面的求解过程有问题,说明当前的数字的选择有问题,那么再挑选另一个数填写,继续求解。如果,所有的选择都求不出最后的结果,还是说明:要么这个数独没有解;要么之前的解题过程有问题,需要返回检查之前的解题过程查看。如此反复,直到求出最终的答案。
会有种极端的情况(可能性不大)。那就是在当前的空白单元格的所有可能的数字都选择了一遍,都没有解。而之前又没有出现无唯一数单元格的状况。那就说明这个数独根本就没有解
下图是数独求解的流程图
下面谈谈该算法的具体实现
1、数独状态的表示
用计算机来求解数独。基本的一点就是如何表示数独的状态。
用整形一维数组来表示数独的状态
用Num(80)表示数独的状态(数组的下标从0开始),数独是一个二维表格,而数组是一维数组。那么就存在一维和二维之间的转换
一维数组的下标Index(小标从0开始)和二维下标X、Y(下标从0开始)之间的转换公式
一维到二维的转换 &&X=Int(Index/9) &&Y=Index&mod&9&&二维到一维的转换 &&Index=X*9+Y&
数组中的每个整数表示数独对应的单元格的状态
正数表示空白单元格能填的数的组合,用二进制表示。用位来表示该单元格是否能填相应的数字,1表示能填,0表示不能填。
如文章开始的数独的单元格(1,1)可能填7和8,则第7位和第8位上是1(位数是从后往前数),其余位都是0,用整数表示就是Num(0)=2=192
每在单元格中填一个数字,则把相应的行、列、宫中其余的单元格把该数字去掉。
我们可以充分利用位运算来简化去数字的过程。如:要把单元格去掉7这个数字的可能。首先7对应的二进制位2,取其反数得到2,再和目标单元格的数值进行AND的位运算,来实现去除该单元格7这个数字的可能性(由于位运算的便捷,不需要考虑该单元格是否原本包含7这个数字的可能性)。
如:(1,1)=2 AND 2=2,去除7这个可能性,只剩8这个可能性了,也就是成为唯一数单元格
再比如:(1,9)=2 AND 2=2,原本单元格就没有7这个可能性,执行位运算后,还是原来的可能性,没有发生变化。
负数表示该单元格已经确定的数,例如:(1,2)=-6,表示该单元格已近填了数字6
0表示该单元格既没有填确定的数字,也没有可填数的可能性。也就是上文说的无解单元格
为了算法中计算的方便,事先把这些二进制数都缓存起来,用一个一维的数组表示
用数组V来表示各个位对应的数字
V(0)==1&&V(1)==2&&V(2)==4&&V(3)==8&&V(4)==16&&V(5)==32&&V(6)==64&&V(7)==128&&V(8)==256&&V(9)==511&
数字7对应的二进制数为V(6)=2=64,7的反数为V(9)-V(6)=2=447
每个单元格初始的值都是V(9)=2=511
2、如何获得一个单元格的可填数的个数
由于是用二进制来表示单元格的状态,那么可填数的个数就是该数字中1的个数。我们之前有一个很方便的方法快速计算一个数中1的个数,参看。
3、状态的缓存
依据之前的说法,在碰到无唯一数单元格的情况时,要把当前的状态缓存起来。考虑到实际情况,从算法的角度上来说,用栈(先进后出)这个数据结构来实现比较合适。可以自己写一个栈的实现。但是,目前很多的编程语言都实现了基本的数据结构,提供了基本的数据结构的类和方法供我们调用。
以Visual Studio为例,它有Stack这个类,实现了栈的基本操作。有两个栈的方法:Push(压栈)&&把数据写到栈里面;Pop(出栈)&&把数据从栈里提出来,并删除栈中的数据。
4、代码说明
基本的变量
Private&_Num(80)&As&Integer& &&&&&Private&_V(9)&As&Integer& &&&&&Private&_S&As&System.Text.StringBuilder& &&&&&Private&_HasString&As&Boolean& &
_Num数组表示数独的状态;_V数组是辅助数组,缓存常用的二进制数
_S是一个文本对象,保存数独求解的过程;_HasString是个开关变量,表示是否记录求解过程;这两个变量是辅助变量,仅仅起到记录的作用。
类的初始化
Public&Sub&New(Optional&ByVal&HasString&As&Boolean&=&True)& &&&&&Dim&I&As&Integer& &&&&&_V(0)&=&1& &&&&&For&I&=&1&To&8& &&&&&&&&&_V(I)&=&_V(I&-&1)&*&2& &&&&&Next& &&&&&_V(9)&=&511& &&&&&&For&I&=&0&To&80& &&&&&&&&&_Num(I)&=&_V(9)& &&&&&Next& &&&&&&_S&=&New&System.Text.StringBuilder& &&&&&_HasString&=&HasString& &End&Sub&&
代码的前半段生成V这个数组,_V(9)=511。后半段,初始化数独数组。由于是空白数独数组,故每个单元格的值都是_V(9)
在给定的单元格里移除某个数字的可能性代码
Private&Function&RemoveNum(ByVal&Row&As&Integer,&ByVal&Col&As&Integer,&ByVal&Num2&As&Integer)&As&Integer& &&&&&Dim&Index&As&Integer&=&Row&*&9&+&Col& &&&&&If&_Num(Index)&&&0&Then&_Num(Index)&=&_Num(Index)&And&Num2& &&&&&Return&_Num(Index)& &End&Function&&
3个参数,Row表示行,Col表示列(都是下标从0开始),Num2表示要去除的数的反码,以二进制表示。
例如:在(1,1)这个单元格去除7这个可能性,则调用RemoveNum(0,0,2)
返回值是该单元格的状态值,如果返回0,表示该单元就成了无解单元格,要后面的代码做适当的处理
在给定的单元格填某个数的代码
Private&Function&SetNumPri(ByVal&Row&As&Integer,&ByVal&Col&As&Integer,&ByVal&Num&As&Integer)&As&Boolean& &&&&&If&(_V(Num)&And&_Num(Row&*&9&+&Col))&=&0&Then&Return&False& &&&&&_Num(Row&*&9&+&Col)&=&-(Num&+&1)& &&&&&Num&=&_V(9)&-&_V(Num)& &&&&&&Dim&I&As&Integer,&J&As&Integer& &&&&&&For&I&=&0&To&8& &&&&&&&&&If&RemoveNum(I,&Col,&Num)&=&0&Then&Return&False& &&&&&&&&&If&RemoveNum(Row,&I,&Num)&=&0&Then&Return&False& &&&&&Next& &&&&&&Dim&R1&As&Integer&=&Int(Row&/&3)&*&3& &&&&&Dim&C1&As&Integer&=&Int(Col&/&3)&*&3& &&&&&&For&I&=&R1&To&R1&+&2& &&&&&&&&&For&J&=&C1&To&C1&+&2& &&&&&&&&&&&&&If&RemoveNum(I,&J,&Num)&=&0&Then&Return&False& &&&&&&&&&Next& &&&&&Next& &&&&&&Return&True& &End&Function& &
3个参数,Row表示行,Col表示列,Num表示要填充的数字(下标从0开始),这个方法是供类内部调用,从程序的角度来说,程序处理下标,从0开始比从1开始要来得简单。
例如:在(1,1)中填入数字7,则调用SetNumPri(0,0,6)
代码的第1行,先利用位运算判断当前单元格能否填制定的数字,不能填返回False
代码的第2行,设置当前单元格为指定数字,之前说了,用负数表示已填好的数字
代码的第3行,获得当前数字的反码,为后面去除该单元格所在的行、列、宫的其他单元格的该数字做准备
后面有两个循环,第一个循环去除行、列的其他单元格的该数字;第二个双循环去除宫的其他单元格的该数字。在调用RomoveNum方法时,若返回的是0,说明产生了无解单元格,那说明在这个单元格填该数字是不合理的,故返回False
当全部的代码都能顺利完成了,说明这个单元格填该数字是合理的,返回True
该方法的另一个重载形式
Private&Function&SetNumPri(ByVal&Index&As&Integer,&ByVal&Num2&As&Integer)&As&Boolean& &&&&&Dim&Row&As&Integer&=&Int(Index&/&9)& &&&&&Dim&Col&As&Integer&=&Index&Mod&9& &&&&&Dim&I&As&Integer& &&&&&For&I&=&0&To&8& &&&&&&&&&If&_V(I)&=&Num2&Then&Exit&For& &&&&&Next& &&&&&Return&SetNumPri(Row,&Col,&I)& &End&Function& &
这也是一个供内部调用的方法,两个参数,Index是一维数组的下标;Num2是数字的二进制的形式。整个方法就是参数的转换,然后调用之前的方法
下面是两个供外面调用的方法
Public&Function&SetNum(ByVal&Row&As&Integer,&ByVal&Col&As&Integer,&ByVal&Num&As&Integer)&As&Boolean& &&&&&Return&SetNumPri(Row&-&1,&Col&-&1,&Num&-&1)& &End&Function& &&Public&Function&SetLine(ByVal&Row&As&Integer,&ByVal&ParamArray&Num()&As&Integer)&As&Boolean& &&&&&If&Num.Length&=&0&Then&Return&True& &&&&&&Dim&I&As&Integer& &&&&&&For&I&=&0&To&IIf(Num.Length&-&1&&&8,&8,&Num.Length&-&1)& &&&&&&&&&If&Num(I)&&&0&AndAlso&SetNumPri(Row&-&1,&I,&Num(I)&-&1)&=&False&Then&Return&False& &&&&&Next& &&&&&&Return&True& &&End&Function&&
第一个方法是公开给外部调用的填数的方法。对外来说,从直观性上来说,下标是从1开始比较合适,但是内部的方法从0开始比较好。
如在(1,1)填7,调用SetNum(1,1,7),这个方法转而调用SetNumPri(0,0,6)
这个方法一般用在初始化数独时候调用
第二个方法也是公开给外部的方法,一次填写一行数的方法,如果是空白单元格,则用0替代
如本文开始的数独,填写第一行代码就是SetLine(1,0,6,0,5,9,3,0,0,0)
内容导航&第 1 页: &第 2 页: &第 3 页:
关于&&&&&&的更多文章
【导读】北京时间日19:41分,美国当地时间6时41分,
本次的专刊为大家提供了Oracle最新推出的Java SE 8详细的开发教程,从解读到探究Java 8最新
再过十几天很多同学又要爬楼梯睡觉,早上七点起床,晚
8月第二周,开发者们每月必看的编程语言排行榜如期而
7月的名字叫“流火”!本周出差工作的各位辛苦了,因
本书综合介绍了微软的Windows Server 2003操作系统和微软其他常用应用软件提供的服务,同时融入了作者在Windows网络管理上的多年
51CTO旗下网站数独游戏下载_九宫格数独单机游戏下载大全
数独游戏下载系列,这里包含了好玩的的九宫格数独游戏作品,还有别的数独游戏也有,这些游戏会自动生成数独,会用颜色标注重复的数字,功能都很强大。数独是一种源自18世纪末的瑞士,后在美国发展、并在日本得以发扬光大的数学智力拼图游戏。拼图是九宫格(即3格宽×3格高)的正方形状,每一格又细分为一个九宫格。在每一个小九宫格中,分别填上1至9的数字,让整个大九宫格每一列、每一行的数字都不重复。 数独的玩法逻辑简单,数字排列方式千变万化。不少教育者认为数独是锻炼脑筋的好方法。
PC硬盘版106.8M英文
PC硬盘版17.9M英文
PC硬盘版90.3M英文
中文版19.3M简体
gba版1.9M简体
硬盘版24.9M简体
(集成nds模拟器)6.3M简体
(数独游戏)11.9M英文
硬盘版(最好的数独游戏)5.3M英文
V3.0(数学益智游戏)4.2M
本类热门精选

我要回帖

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

 

随机推荐