#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
int f[10][10];
int position[100][3];
int ks;
int ok;
int main()
{
int dfs(int r,int c,int posi);
int i,j,t,kk,startx,starty;
scanf("%d",&t);getchar();
for (kk=1;kk<=t;kk++)
{
ks=0;
int start;
char tmp;
for (i=1;i<=9;i++)
{
for (j=1;j<=9;j++)
{
scanf("%c",&tmp);
f[i][j]=tmp+1-'1';
if (f[i][j]==0)
{
ks++;
position[ks][1]=i;
position[ks][2]=j;
}
}
getchar();
}
dfs(position[ks][1],position[ks][2],ks);
for (i=1;i<=9;i++)
{
for (j=1;j<=9;j++)
{
printf("%d",f[i][j]);
}
printf("\n");
}
ok=0;
}
return 0;
}
int dfs(int r,int c,int posi)
{
bool vis[10];
memset(vis,true,sizeof(vis));
int i,j,w;
int rr,cc;
for (i=1;i<=9;i++)
{
vis[f[i][c]]=false;
}
for (i=1;i<=9;i++)
{
vis[f[r][i]]=false;
}
for(i=(r-1)/3*3+1;i<=(r-1)/3*3+3;i++) //巧处一,用求商法得到9*9中3*3,
{
for(j=(c-1)/3*3+1;j<=(c-1)/3*3+3;j++)
{
if (i==r &&j==c) continue;
vis[f[i][j]]=false; //巧处二,用哈希法 //对BFS,DFS中判断是否legal的地方以后改为先用hash保存结果再直接判断如果只是一句话判断的函数,就可以用
}
}
for (w=1;w<=9;w++)
{
if ( vis[w] )
{
f[r][c]=w;
if (posi==1) { ok=1; return 0; }
dfs(position[posi-1][1],position[posi-1][2],posi-1);
if (ok==1) {return 0;}
f[r][c]=0;
}
}
return 0;
}
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
int f[10][10];
int position[100][3];
int ks;
int ok;
int main()
{
int dfs(int r,int c,int posi);
int i,j,t,kk,startx,starty;
scanf("%d",&t);getchar();
for (kk=1;kk<=t;kk++)
{
ks=0;
int start;
char tmp;
for (i=1;i<=9;i++)
{
for (j=1;j<=9;j++)
{
scanf("%c",&tmp);
f[i][j]=tmp+1-'1';
if (f[i][j]==0)
{
ks++;
position[ks][1]=i;
position[ks][2]=j;
}
}
getchar();
}
dfs(position[ks][1],position[ks][2],ks);
for (i=1;i<=9;i++)
{
for (j=1;j<=9;j++)
{
printf("%d",f[i][j]);
}
printf("\n");
}
ok=0;
}
return 0;
}
int dfs(int r,int c,int posi)
{
bool vis[10];
memset(vis,true,sizeof(vis));
int i,j,w;
int rr,cc;
for (i=1;i<=9;i++)
{
vis[f[i][c]]=false;
}
for (i=1;i<=9;i++)
{
vis[f[r][i]]=false;
}
for(i=(r-1)/3*3+1;i<=(r-1)/3*3+3;i++) //巧处一,用求商法得到9*9中3*3,
{
for(j=(c-1)/3*3+1;j<=(c-1)/3*3+3;j++)
{
if (i==r &&j==c) continue;
vis[f[i][j]]=false; //巧处二,用哈希法 //对BFS,DFS中判断是否legal的地方以后改为先用hash保存结果再直接判断如果只是一句话判断的函数,就可以用
}
}
for (w=1;w<=9;w++)
{
if ( vis[w] )
{
f[r][c]=w;
if (posi==1) { ok=1; return 0; }
dfs(position[posi-1][1],position[posi-1][2],posi-1);
if (ok==1) {return 0;}
f[r][c]=0;
}
}
return 0;
}