用户:  密码: 记住我     找回密码 
| 文章 >> 编程通用 >> 算法

数独解算器和发电机

日期 | 作者阿布舍克_Agarwal | 浏览86 | 评分100 | 标签算法 评论
{A}{S0}简介
好了,Sudoku是不是一个新的游戏,很多软件都已经玩数独的净。我试图在发展中国家独一年前,很长一段时间后,amnbsp我的手,与大家分享。独特的原理
你必须知道数独的规则。让我到一个确切的定义规则,这将有助于您了解代码:
数独,是一个与P4广场一般P = 3,较大的方形网格p2xp2尺寸的正方形网格。每个较大的方形网格P2箱PXP尺寸。部分填充较大的电网。规则是填补在网格使每个水平行,每一个垂直列和每PXP框包含从1到n的数字(N = P2),而不必重复在同一行的数字,列或箱。我有这个规则命名的独特性的原则。"守则"的设计
的设计基本上包括三个部分:解决问题生成问题图形(接口吸引力的重要组成部分,使)求解算法
解决数独简单的方法是,以纪念所有可能的值(1 - N),可以有一个正方形。然后"的独特性原则的基础上??丢弃,不能在这方充满号码。当一个正方形是剩下的只有一个数字或一个数字,它可以不被的行或列或框对应广场等广场,填补数量和删除行,列的平方的数目的可能性框属于最近填补平方米。以这种方式出发,一个唯一的数字,可以发现所有的广场。
算法实现如下上述过程。在象征性的形式,该算法可以表述为:
Mark all candidate numbers

Cansolve=true; 

While 

(not all squares are filled and cansolve=true ) {

Cansolve=false;

  For(each row in rows)

  For(each col in columns) {

   If (only one candidate number){ 

    Fill the square with the candidate number;

    Cansolve=true;

    Update candidate numbers of all squares in that row, column and box}

   Else if (a number exists which is not illegible for any other square in that row,

        column and box) {  

      Fill the square with the candidate number;       

Cansolve=true; 

}//end 

for loops

}//end 

while loop
问题的生成算法
Sudoku的最困难的方面是如何产生的一个问题,有一个独特的解决方案。我申请科和绑定技术为基础的算法。
在这个算法中,我们遵循两个步骤生成问题的网格。在第一步中,我们完全填补网格随机受到制约。这意味着,却使一个正方形,心灵的独特性的原则。第一步是完成后,删除一个随机号码之一。如果删除一个数字后,这个问题是有一个独特的解决方案,产生其他的孩子,否则杀死节点(取代在其原来的位置),并删除其他号码。这样,一个问题网格可以起源。这种方法的优点是它不会被困在一个无限循环,一定会产生一个解决方案。
现在,我们将探讨了详细的分支定界的方法。一般的n值中发挥了苏- Doku(P = 3)= 9。该方案已考虑为标准值N = 9的发展,但它具有灵活的接口定义所有的常量可以改变和程序,可以延长为n的值越大
该算法产生的问题已被分为两部分,产生完整的电网和第二个问题网格之一。{C}
这里显示的算法是不言而喻的。但在给定的算法,程序进入一个无限循环或行连续顺序1,2,3,4走过时,需要更多的时间... ...??该方案是随机选择的数字,直观的解释是一个事实,随机数的算法是比较成功的时在解集分布的随机数。加一当行,所有的数字都充满在开始行(说,1,2,3,4和5),有一种可能性,即没有有效的数字,其余为剩余的行。但是,如果这五个行本来1,3,5,7和9是一个随机函数来选择行2,4,6,8大领域。因此,在代码中,行已经走过顺序1,3,5,7,9,2,4,6,8。
// algorithm creatProblemGrid()

// k is the no of squares to be removed 

List points //a collection list of size n2 containing coordinates of the squares that

//can be removed

for (count = 0 to k) {

 if points is empty 

   return false;

 select a square at random and remove the number

 find the solution with the solving algorithm 

 if (!solution exists and unique) {

 count--;

 replace the removed number;

 remove the square from points

 continue;

 }

remove the square from points

}

return true; 
图形
本方案的GUI界面,就是这么简单,您可以轻松地理解后,在查看代码。我已thenbsp;本文({A2})帮助开发GUI。最后
不要忘记本文级如果你喜欢它。我喜欢它。 :)..........
关于作者:阿布舍克_Agarwal


中国
我是一名编程爱好者,
谢谢orcode.com为我们提供一个学习和分享的平台。
有什么问题。可以就本内容回复,我看到时。会尽量回复的。
评论会员:会员3748012 时间:2011/12/06
它的真正有用的
!良好的发电机引擎。
UI是简单和容易使用
评论会员:。迪夫亚库卡尼 时间:2011/12/06
您好,

搞好。但我想知道您的代码将始终生成一个独特的解决方案的难题呢?你在哪里做检查
谢谢。
- 迪夫亚
评论会员:阿布舍克_Agarwal 时间:2011/12/06
是的,它会始终产生一个独特的问题。已久的,因为我编写的,所以真的不记得我怎么。我认为这是在照顾问题的生成算法本身。仔细看,你会发现它
评论会员:。机体零件托马斯P 时间:2011/12/06
您好阿布舍克,

有更简单,更容易的算法来生成数独grids.your算法好。但并网发电,将需要更多的时间比使用其他一些算法。

我有用于生成一个在线数独之一。

{A3}

认为它多一点。你会得到它。

的问候,
机体零件

{A4}
评论会员:阿布舍克_Agarwal 时间:2011/12/06
感谢鲍勃,现在有许多其他的算法,现有的搜查后,数独问题的产生,如遗传方式,等我做这个项目早在2004年的第二年。将考虑你的算法...

顺便说一句普通PC上运行需要第二次的分数产生的问题..
评论会员:Mikeanical 时间:2011/12/06
您好,
认为这是一个很好的的计划,你编码在这里。
试图在Visual Studio 2005年临编译,得到只有约一个错误的或缺少的组件的错误和异常HRESULT:0x80131047

此外,在主要程序代码的编译器命令:#endregion声明
似乎是错的,或者其他的东西失踪。

你能帮助,或上传一个新的项目?
工作与框架2.0


保持简单
评论会员:。阿布舍克_Agarwal 时间:2011/12/06
问题是WID VS2005亲,它不会允许程序集名称conatin"'"字符。您可以
release文件夹中的执行文件或更改程序集的名称,在项目属性"阿布舍克数独",THN它可以直接从Visual Studio执行.. 后,我会上传更新projectsometime仪式现在IMA有点忙。
感谢。



{A5}
评论会员:阿布舍克_Agarwal 时间:2011/12/06
我已经上传的改良版......

{A5}
评论会员:ReorX 时间:2011/12/06
我没有看到的代码为什么,但它可能不符合事实的东西,我开始从zip文件的应用程序直接。

世界的救主是企鹅和Linus Torvalds是他的先知
评论会员:。阿布舍克_Agarwal 时间:2011/12/06
您应该再次尝试。我也开始应用程序(EXE)从zip文件,这是相当不错的工作。

{A5}
 文章分类
 桌面
 网页开发
 移动开发
 数据库
 多媒体
 编程语言
 平台,框架和库
 编程通用
 图形/设计
 开发周期
 一般阅读
 第三方产品
 作者资源
 其他
快速解答标签
c x 6850
VC x 7405