填到一半就填不下去了(样例自然没有过)
#include <bits/stdc++.h>
using namespace std;
bool vis[10][10][10];
void dfs(int x, int y, int g[][10]) {
/* puts("");
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++)
cout << g[i][j] << ' ';
cout << endl;
}
puts("");*/
while (g[x][y]) {
if (x == 9 && y == 9) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++)
cout << g[i][j] << ' ';
cout << endl;
}
exit(0);
}
if (y == 9) {
y = 1;
x++;
}
else y++;
}
for (int i = 1; i <= 9; i++) {
bool flag = true;
for (int j = 1; j <= 9; j++)
if (g[x][j] == i) {
flag = false;
break;
}
if (!flag) continue;
for (int j = 1; j <= 9; j++) {
if (g[j][y] == i) {
flag = false;
break;
}
}
if (!flag) continue;
int dx = ((x - 1) / 3 + 1) * 3 - 2;
int dy = ((y - 1) / 3 + 1) * 3 - 2;
for (int j = dx; j <= dx + 2; j++)
for (int k = dy; k <= dy + 2; k++)
if (g[j][k] == i) {
flag = false;
break;
}
if (!flag) continue;
g[x][y] = i;
if (y == 9 /*&& !vis[x][y][i]*/) {
//vis[x][y][i] = true;
dfs(x + 1, 1, g);
}
else if (!vis[x][y][i]) {
//vis[x][y][i] = true;
dfs(x, y + 1, g);
}
}
}
int main()
{
int g[10][10];
for (int i = 1; i <= 9; i++)
for (int j = 1; j <= 9; j++)
cin >> g[i][j];
dfs(1, 1, g);
return 0;
}