求破解九九宫格JAVA代码

来源:百度知道 编辑:UC知道 时间:2024/05/15 21:38:25
原题见北京晚报智力休闲板块:

图形为,一个由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
错->继续循环
}

完毕.

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