您的位置:首页 > 其它

POJ 2676 Sudoku(DFS)

2012-07-11 18:11 435 查看
题目链接

判断条件没搞好 2Y,全部是0的时候查出错。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char p[11][11];
int key[11][11];
int r[11][11],c[11][11],o[11][11],z;
int judge(int i,int j)
{
int a;
if(i <= 2)
{
if(j <= 2)
a = 0;
else if(j <= 5)
a = 1;
else if(j <= 8)
a = 2;
}
else if(i <= 5)
{
if(j <= 2)
a = 3;
else if(j <= 5)
a = 4;
else if(j <= 8)
a = 5;
}
else if(i <= 8)
{
if(j <= 2)
a = 6;
else if(j <= 5)
a = 7;
else if(j <= 8)
a = 8;
}
return a;
}
void dfs(int x,int y)
{
int a,b,i,j;
if(z) return ;
j = judge(x,y);
if(x == 9&&y == 0)
{
for(i = 0; i <= 8; i ++)
{
for(j = 0; j <= 8; j ++)
printf("%d",key[i][j]);
printf("\n");
}
z = 1;
return ;
}
if(x > 8) return ;
if(y == 8)
{
a = x+1;
b = 0;
}
else
{
a = x;
b = y+1;
}
if(key[x][y] != 0)
dfs(a,b);
else
{
for(i = 1; i <= 9; i ++)
{
if(!r[x][i]&&!c[y][i]&&!o[j][i])
{
r[x][i] ++;
c[y][i] ++;
o[j][i] ++;
key[x][y] = i;
dfs(a,b);
key[x][y] = 0;
r[x][i] = 0;
c[y][i] = 0;
o[j][i] = 0;
}
}
}
}
int main()
{
int i,j,k,t;
scanf("%d%*c",&t);
while(t--)
{
z = 0;
memset(key,0,sizeof(key));
memset(r,0,sizeof(r));
memset(c,0,sizeof(c));
memset(o,0,sizeof(o));
for(i = 0; i <= 8; i ++)
gets(p[i]);
for(i = 0; i <= 8; i ++)
for(j = 0; j <= 8; j ++)
{
if(p[i][j] != '0')
{
key[i][j] = p[i][j] - '0';
k = key[i][j];
r[i][k] ++;
c[j][k] ++;
o[judge(i,j)][k]++;
}
}
dfs(0,0);
}
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: