三个数组分别记录
行数组 列数组 3x3数组
#include <iostream>
#include <cstdio>
#include <unordered_map>
using namespace std;
const int N = 20;
char g[N][N];
int st[N][N], col[N][N], row[N][N];
bool dfs() {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (g[i][j] == '.') {
for (char c = '1'; c <= '9'; c++) {
int idx = i / 3 * 3 + j / 3;
int val = c - '0';
if (!row[i][val] && !col[j][val] && !st[idx][val]) {
g[i][j] = c;
st[idx][val] = 1;
row[i][val] = 1;
col[j][val] = 1;
if (dfs()) return true;
st[idx][val] = 0;
row[i][val] = 0;
col[j][val] = 0;
g[i][j] = '.';
}
}
return false;
}
}
}
return true;
}
int main() {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
cin >> g[i][j];
if (g[i][j] != '.') {
int val = g[i][j] - '0';
int idx = i / 3 * 3 + j / 3;
st[idx][val] = 1;
row[i][val] = 1;
col[j][val] = 1;
}
}
}
dfs();
for (int i = 0; i < 9; i++) puts(g[i]);
return 0;
}