数独解题
- 问题:输入一个问题数独,输出答案
输入:9行9列数字x,每一行数字之间没有空格,x范围0-9(0代表空格)
输出:数独答案
- 思路:从(1,1)遍历(9,9)共81个位置,如果(9,9)有数可填,则解决问题。
1.用ax[x][y],ay[x][y],az[x][y]分别记录x行,x列,x方块中哪些数字y已经被用 0 或者没用 1 ,三者都为 1,表明数字 y 在当前位置可填
2.对于搜索到一个位置,只会出现两种情况,可以继续往下查找和不可以继续往下查找
可以继续往下查找right:此位置1-9中有数可填
不可以error:此位置1-9都不可以填,即1-9在此位置的行列方块有用过
- 代码
#include <stdio.h>
int ax[10][10], ay[10][10], az[10][10],x,y;
int xy1[10][10];
int xy2[10][10];
int form[10][10];
int i1;
int xy[10][10];
void doform();
int cube(int, int);
void error();
void right();
void doform()
{
int i,j;
int cnt;
cnt = 1;
for( i = 1; i<10; i++ ){
for( j = 1; j<10; j++ ){
if( j == 4 || j == 7 )
cnt++;
form[i][j] = cnt;
}
cnt -= 2;
if( i == 3 || i == 6 )
cnt += 3;
}
}
int cube(int x, int y)
{
return form[x][y];
}
void right()
{
int i;
int z;
z = cube(x,y);
i = xy2