{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。最后
不要忘记本文级如果你喜欢它。我喜欢它。 :)..........