思路:
#include<bits/stdc++.h>
using namespace std;
int a[10][10],sign;
int judge(int n,int x,int y)
{
for(int i=0;i<9;++i)
{
if(a[i][y]==n)return 0;
if(a[x][i]==n)return 0;
}
x=x/3*3;y=y/3*3;
for(int i=x;i<x+3;++i)
for(int j=y;j<y+3;++j)
if(a[i][j]==n)return 0;
return 1;
}
void print()
{
for(i=0;i<9;++i)
{
for(j=0;j<9;++j) printf("%d ",a[i][j]);
printf("\n");
}
sign=1;
printf("\n");
}
void DFS(int x,int y)
{
if(sign)return;
if(x==9&&y==0)
{
print();return ;
}
if(y==9)
{
DFS(x+1,0);
}
if(a[x][y]!=0) DFS(x,y+1);
else
{
for(int i=1;i<=9;++i)
{
if(judge(i,x,y))
{
a[x][y]=i;
DFS(x,y+1);
a[x][y]=0;
}
}
}
}
int main()
{
int n,i,j;
while(~scanf("%d",&n))
{
while(n--)
{
memset(a,0,sizeof(a));
for(i=0;i<9;++i)
for(j=0;j<9;++j)
scanf("%d",&a[i][j]);
sign=0;
DFS(0,0);
}
}
return 0;
}