RT
#include <cstdio>
int a[9][9];
bool vis[3][10][10];
bool flag = false;
void dfs(int x, int y)
{
if(flag)
return;
if (x == 9)
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
printf("%d ", a[i][j]);
}
putchar('\n');
}
flag = true;
return;
}
if (a[x][y] != 0)
{
if (y == 8)
dfs(x + 1, 0);
else
dfs(x, y + 1);
}
else{
for(int i = 1; i<=9; i++)
if (!vis[0][x][i] &&
!vis[1][y][i] &&
!vis[2][x / 3 * 3 + y / 3][i])
{
a[x][y] = i;
vis[0][x][i] = 1;
vis[1][y][i] = 1;
vis[2][x / 3 * 3 + y / 3][i] = 1;
if (y == 8)
dfs(x + 1, 0);
else dfs(x, y + 1);
a[x][y] = 0;
vis[0][x][i] = 0;
vis[1][y][i] = 0;
vis[2][x / 3 * 3 + y / 3][i] = 0;
}
}
}
int main()
{
int c;
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
scanf("%d", &c);
if (c == 0)
{
a[i][j] = 0;
}
else
{
a[i][j] = c - '0';
vis[0][i][a[i][j]] =
vis[1][j][a[i][j]] =
vis[2][i / 3* 3 + j / 3][a[i][j]] = 1;
}
}
}
dfs(0, 0);
return 0;
}