#include<bits/stdc++.h>
using namespace std;
int mp[10][10];
void print() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
cout << mp[i][j] << " ";
}
cout << endl;
}
exit(0);
}
bool pd(int x, int y, int pas) {//判断合法
//行列判断
for (int i = 1; i <= 9; i++) {
if (mp[x][i] == pas) {
return false;
}
}
for (int i = 1; i <= 9; i++) {
if (mp[i][y] == pas) {
return false;
}
}
//宫格判断
while (x % 3 != 1) {
x--;
}
while (y % 3 != 1) {
y--;
}
for (int i = x; i <= x + 2; i++) {
for (int z = y; z <= y + 2; z++) {
if (mp[i][z] == pas) {
return false;
}
}
}
return true;
}
void dfs(int x, int y) {
if (x == 10 && y == 1) {
print();
return ;
}
if (mp[x][y] == 0) {
for (int i = 9; i >= 1; i--) {
if (pd(x, y, i)) {
mp[x][y] = i;
if (y == 9) {
dfs(x + 1, 1);
mp[x][y] = 0;
} else {
dfs(x, y + 1);
mp[x][y] = 0;
}
}
}
} else {
if (y == 9) {
dfs(x + 1, 1);
} else {
dfs(x, y + 1);
}
}
}
int main() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
cin >> mp[i][j];
}
}
dfs(1, 1);
return 0;
}
用了深搜算法,第四个测试点TLE了