/*
分析:
简单DFS。
英语不好,被题目阴了一把-、-。初始所给出的9*9
不一定符合数独的规则,这种情况下就不用填了,直接输
出不能完成。
读第一遍题的时候就感觉不对劲儿了,不过以往做题
这样玩的不多,就忽略了,然后了WA了一次-、-,然后接
着就想到这点不能忽略了-、-。。
2012-11-26
*/
分析:
简单DFS。
英语不好,被题目阴了一把-、-。初始所给出的9*9
不一定符合数独的规则,这种情况下就不用填了,直接输
出不能完成。
读第一遍题的时候就感觉不对劲儿了,不过以往做题
这样玩的不多,就忽略了,然后了WA了一次-、-,然后接
着就想到这点不能忽略了-、-。。
2012-11-26
*/
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
int ans[10][10];
char str[10][20];
struct A
{
int x,y;
}E[10];
int k;
int ANS;
int Judge(int x,int y,int j)
{
int i,l;
int a,b;
for(i=0;i<9;i++) if(ans[i][y]==j && i!=x) return 1;
for(l=0;l<9;l++) if(ans[x][l]==j && l!=y) return 1;
for(a=0,i=x/3*3;a<3;a++,i++)
for(b=0,l=y/3*3;b<3;b++,l++)
{
if(i==x && l==y) continue;
if(ans[i][l]==j) return 1;
}
return 0;
}
int JUDGE()
{
int i,l;
for(i=0;i<9;i++)
for(l=0;l<9;l++)
{
if(ans[i][l]==0) continue;
if(Judge(i,l,ans[i][l]))return 1;
}
return 0;
}
void DFS(int num)
{
int j;
if(num==k) {ANS=1;return ;}
if(ANS) return ;
for(j=1;j<=9;j++)
{
if(Judge(E[num].x,E[num].y,j)) continue;
ans[E[num].x][E[num].y]=j;
DFS(num+1);
if(ANS) return ;
ans[E[num].x][E[num].y]=0;
}
}
int main()
{
int T,flag=0;
int i,l;
scanf("%d",&T);
while(T--)
{
if(flag) printf("\n");
k=0;flag=1;
for(i=0;i<9;i++) scanf("%s",str[i]);
for(i=0;i<9;i++)
for(l=0;l<9;l++)
{
ans[i][l]=str[i][l]-'0';
if(!ans[i][l]) {E[k].x=i;E[k++].y=l;}
}
if(JUDGE()) {printf("Could not complete this grid.\n");continue;}
ANS=0;
DFS(0);
if(ANS)
{
for(i=0;i<9;i++)
{
for(l=0;l<9;l++) printf("%d",ans[i][l]);
printf("\n");
}
}
else printf("Could not complete this grid.\n");
}
return 0;
}