- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
數独00002
数独游戏求解程序(附源代码)2007-08-10 16:00:21| 分类:我的程序阅读5777 评论27 字号:大中小订阅 数独游戏规则 是一种源自18世纪末瑞士的数学智力拼图游戏。拼图是九宫格(即3格宽×3格高)的正方形状,每一格又细分为一个九宫格。在每一个小九宫格中,分别填上1至9的数字,让整个大九宫格每一列、每一行的数字都不重复。 数独的玩法逻辑简单,数字排列方式千变万化。不少教育者认为数独是锻炼脑筋的好方法。 计算机算法简介 本文所讨论的算法是一种通用算法,虽然不能说是最快的算法,但却可以求解所有的数独游戏。 算法准备: 1、一个可能性:表示某个格子可能填写的数字。 2、可能性数目:表示某个格子可能性的数量。为0表示已经确定。 3、区域标志:表示某个格子所在区域(小九宫)的ID,所有区域标志都是预定义的。 4、确定数量:表示所有数字已经确定的格子的数量,为81时则表示已经找到解。 5、整个九宫格用三个矩阵表示:可能性矩阵,数目矩阵,区域标志矩阵 算法的基本思想: 步骤1、将所有未确定的格子的可能性定义为0xFFFF(即所有数字都可能),可能数目为9。 步骤2、寻找所有确定的格子A(可能数目为0),在所有与A同行、同列和同区域的未确定的格子的可能性中减去与A相同的可能性。例如:A确定为9,则与A同行、同列和同区域(区域标志相同)的未确定的格子的可能性与0xFEFF按位与(除去可能性9),并将其可能性数目减少。 在除去可能性的过程中如果发现某个格子B的可能性数目由1减小为0,说明B和A只能取相同的数字,这可能是题目本身无解引起,也肯能是由于步骤3中搜索方向不对引起的,可认为此方向的搜索无解,退出这一方向的搜索。定义这个检查为唯一性检查。 步骤3、寻找所有未确定格子中可能性数目最少的格子M,如果M的可能性数目为1,则确定M:将M的可能性数目定义为0,并把确定数量加1,如果此时确定数量达到81,则报告找到解,否则,在所有与M同行、同列和同区域的未确定的格子的可能性中减去与M相同的可能性,并进行唯一性检查。然后重复步骤3。 如果M的可能性大于1,则把M假设为所有M的可能性,分多个方向进行搜索,在每一个搜索方向重复步骤3(这个可以用递归来实现)。 算法性能 本算法可以在50毫秒以内求解任意有解的数独游戏。 程序运行画面 程序下载 见《数独程序开源》 算法核心代码 由于篇幅限制,不能将所有代码贴出来,只贴一些核心的代码,通过研究这些代码已经可以实现本程序。您也可以参照《数独程序开源》中的程序。// 优化int CNumMatrix::Optimize(){ int x, y; int i; bool changed = true; while(changed) { changed = false; for(x = 0; x m_iSize; x++) { for(y = 0; y m_iSize; y++) { if(NumTrans(m_i16mMatrix[x][y]) == 0) { return -1; } if(m_cmPossible[x][y] == 1) { m_cmPossible[x][y] = 0; for(i = 0; i m_iSize; i++) { // 减少列可能性 if(m_cmPossible[x][i] 0) { this-RemovePossible(x, i, m_i16mMatrix[x][y]); if(m_cmPossible[x][i] == 0) { return -1; } } // 减少行可能性 if(m_cmPossible[i][y] 0) { this-RemovePossible(i, y, m_i16mMatrix[x][y]); if(m_cmPossible[i][y] == 0) { return -1; } } // 减少区域可能性
您可能关注的文档
最近下载
- 数字营销技术应用职业技能等级标准(2021年版).pdf VIP
- 浙江中医药大学《高等数学(上)》内部题库练习期末真题汇编及答案.pdf
- 2025年中国猪肉脯市场调查研究报告.docx
- 部编版二年级语文课文填空汇总.doc VIP
- 国家工商行政管理总局通达商标服务中心招聘模拟备考预测(共1000题)综合模拟试卷+答案解析.docx
- 教科版小学科学知识点汇总.docx VIP
- 部编版二年级语文下册课文填空练习.pdf VIP
- 2025届THUSSAT北京市清华大学中学高考生物二模试卷含解析.doc VIP
- 《数学课程标准》义务教育2022年修订版(原版).pdf VIP
- 半中半理论_del35论数字心理.pdf VIP
文档评论(0)