求破解九九宫格JAVA代码

原题见北京晚报智力休闲板块:

图形为,一个由9个小九宫格组成的大九宫格(3*3排列)。

要求:大九宫格的每行和每列都要有1到9的数字,每一个小的九宫格里也要有1到9的数字。而且同一个数字在每一行,每一列及每个小宫格里只能出现一次,既不能重复也不能少。

题目中还会给一些已经定下来的数字,如:

* * 2 4 5 * 7 * *
* 4 * * * 8 * 3 *
8 * 1 * * 3 5 * 6
* 5 3 * * * * * 4
7 * * * * * * * 2
2 * * * * * 6 7 *
3 * 6 5 * * 1 * 7
* 2 * 1 * * * 5 *
* * 7 * 2 9 4 * *

求用java写成的程序,输出上题的结果:
如果您懒得实现,只要告诉小弟算法也可以,我是已经晕了~

JAVA不熟,不过算法都差不多。
等会给你个C/C++的。

我用C++做出来了.
基本思路说下:
先定义类
class JiuGong
{
public:
int table[9][9];//这个是九宫里的数学 不知道的用0代替
bool mark[9][9];//这个表示九宫状态,true表示已知的,可以不计算的
int x;
int y;//x,y表示当前正在试验的点
JiuGong *pre;//这是后面堆栈用的
bool check();//这函数进行九宫检查,包括行/列/小九宫的查错
bool finish();//这函数检查是否已经完成
bool find();//这函数用来找到下一个未知点(试验点)位置
}

再定义一个类 这是个堆栈
class JiuGongStack()
{
public:
JiuGong *top;
bool push(JiuGong *p);//压
bool pop(JiuGong *p);//弹
}

推算过程:
先声明一个JiuGong结构,导入初始值.
用成员函数find()找到第一个未知点.
以下循环:
{
在试验点数字加1
用成员函数finish()检查是否结束
Y-> 成功 返回
N-> 向下
检查数字>9
Y->POP ->POP失败 ->题目错误 返回
N->向下
用成员函数check()查错
无错->PUSH
错->继续循环
}

完毕.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-01-17
9 3 2 4 5 6 7 8 1
6 4 5 7 1 8 2 3 9
8 7 1 2 9 3 5 4 6
1 5 3 6 7 2 8 9 4
7 6 9 8 4 5 3 1 2
2 8 4 9 3 1 6 7 5
3 9 6 5 8 4 1 2 7
4 2 8 1 6 7 9 5 3
5 1 7 3 2 9 4 6 8
结果都弄出来了!
思路:
1、用0代替*的位置,构成9*9的数组,然后对每个位置执行以下操作:如果该位置是0,判断同行同列其他的非0的数,然后从可能的1-9种去掉,重复的不管,最后看是不是只剩下一个可能的数,如果是0个,那此种情况就没有结果了;如果是1个,就把0改成这个数并从头再来;如果大于1个,就搜索下一个。全搜索完,没有可确定的,进行下一步。
2、如果如果搜索完都不能确定,那么,找有一个位置可能有两种情况的条件,然后确定两种情况进行上面的搜索;(这里要记录这两种情况,如果一种不行,再试另一种)(一般两种情况就能搞定了,没有必要分更多种情况)
我是按照上述思路自己思考的答案,检验正确了!
第2个回答  2008-01-16
环球财商讯(文/Max)九宫格,也称“数独”,是一款逻辑性很强的的数字拼图益智游戏,不仅具有很强的趣味性,而且对大脑非常有好处。小孩子经常玩九宫格,可以锻炼大脑,提高逻辑思维的能力及智力。老年人经常玩数独,可以使大脑处于一种兴奋状态,有益身体的健康。九宫格也是一个非常好的亲子游戏。很多时候,父母可以和孩子一同玩。

它的游戏规则很简单,9×9个格子里,已有若干数字,其他宫位留白,玩家需要自己按照逻辑推敲出剩下的空格里是什么数字,使得每一行与每一列都有1到9的数字,每个小九宫格里也有1到9的数字,并且一个数字在每个行列及每个小九宫格里都只能出现一次。

做这种游戏不需要填字谜那样的语言技巧和文化知识,甚至也不需要复杂的数学能力。因为它根本不需要加减乘除运算。当然,你也千万别小看它,它可并不是那么容易被“制服”的。九宫格绝对是对智慧和毅力的一种考验。在这看似简单的小小一方九宫格上,要用自己所有的想像力、逻辑推理和创新思维。当你握笔沉思的时候,这9个数字很可能让你头痛不已,脉搏加快,恼火不已。不过,当你成功填完所有数字的时候,你肯定会感到欣喜若狂。

很多朋友在经过多次尝试后,总能最终搞定9*9的游戏。但是,你是否想过拓展一下游戏难度,尝试一下11*11,13*13的,甚至更多呢?不要害怕你难以完成,看完下面的技巧,相信你也能轻松搞定。
我们不妨从3*3的来推出这个游戏的基本技巧,如图示:

图:http://www.globalfc.com.cn/Article/UploadFiles/200712/20071216151223995.jpg

看到上图了吗?从1开始向右斜下方顺序排列,遇到阻碍穿到下一行,或者下一列,最终排完后,答案就出来了。从1到9,横向、竖向和斜着交叉的数字加起来均为15。接着我们再来看5*5的格子,如下图:
http://www.globalfc.com.cn/Article/UploadFiles/200712/20071216152019846.jpg

看到了吧,道理相同,都是这样。1从正中央的正下一格开始,向斜下方顺序走,遇到行或者列阻碍就穿过去,如果遇到先前已经填写的数字阻碍,就向下跳两个格,最终写完后就完成了。当然了,随着格数的增多,如9*9,11*11,13*13等,都有很多种写法,格数越多,方法就越多,但方法基本相同,只不过有时候向上跳一格或者向下跳两格的不同,或者1的开始位置的不同,呵呵,如果你感兴趣的话就自己探索吧!
第3个回答  2008-01-16
http://residence.educities.edu.tw/oddest/su101.htm

看看这个图文教程。。。

参考资料:http://yexin218.spaces.live.com/blog/cns!70ba2a372380dca4!734.entry

第4个回答  2008-01-16
看不懂意思。
第5个回答  2008-01-16
有时间我给你做一个,九宫这个是很复杂的,看了好象有什么策略和算法,我都不会,我只会穷举,给你穷举一个吧.
相似回答