Description
Input
Output
Sample Input
1 103000509 002109400 000704000 300502006 060000050 700803004 000401000 009205800 804000107
Sample Output
143628579 572139468 986754231 391542786 468917352 725863914 237481695 619275843 854396127
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <algorithm>
#define RR freopen("in.txt","r",stdin)
#define WW freopne("out.txt","w",stdout)
#define LL long long
#define INF 0x3f3f3f3f
using namespace std;
int Map[10][10];
bool vis[3][10][10];
bool DFS(int x,int y)
{
if(x > 9)
return true;
bool flag;
if(Map[x][y])
{
if(y == 9)
flag = DFS(x+1,1);
else
flag = DFS(x,y+1);
if(flag)
return true;
return false;
}
else
{
int k = 3*((x-1)/3) + (y-1)/3+1;
for(int i=1;i<=9;i++)
{
if(!vis[0][x][i] && !vis[1][y][i] && !vis[2][k][i])
{
Map[x][y] = i;
vis[0][x][i] = vis[1][y][i] = vis[2][k][i] = true;
if(y == 9)
flag = DFS(x+1,1);
else
flag = DFS(x,y+1);
if(!flag)
{
Map[x][y] = 0;
vis[0][x][i] = vis[1][y][i] = vis[2][k][i] = false;
}
else
return true;
}
}
}
return false;
}
int main()
{
int T;
cin>>T;
while(T--)
{
char ch;
memset(vis,false,sizeof(vis));
memset(Map,0,sizeof(Map));
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
cin>>ch;
Map[i][j] = ch - '0';
int t = Map[i][j];
if(t)
{
int k=3*((i-1)/3)+(j-1)/3+1;
vis[0][i][t] = true;
vis[1][j][t] = true;
vis[2][k][t] = true;
}
}
}
DFS(1,1);
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
if(j == 9)
printf("%d\n",Map[i][j]);
else
printf("%d",Map[i][j]);
}
}
}
return 0;
}