0表示空白,需要AI填的部分。
#include <iostream>
using namespace std;
bool isValid(int grid[9][9], int row, int col, int num) {
for (int i = 0; i < 9; i++) {
if (grid[row][i] == num) {
return false;
}
}
for (int i = 0; i < 9; i++) {
if (grid[i][col] == num) {
return false;
}
}
int startRow = row - row % 3;
int startCol = col - col % 3;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (grid[startRow + i][startCol + j] == num) {
return false;
}
}
}
return true;
}
bool solveSudoku(int grid[9][9]) {
for (int row = 0; row < 9; row++) {
for (int col = 0; col < 9; col++) {
if (grid[row][col] == 0) {
for (int num = 1; num <= 9; num++) {
if (isValid(grid, row, col, num)) {
grid[row][col] = num;
if (solveSudoku(grid)) {
return true;
}
grid[row][col] = 0;
}
}
return false;
}
}
}
return true;
}
int main() {
int grid[9][9];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
cin >> grid[i][j];
}
}
if (solveSudoku(grid)) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
cout << grid[i][j] << " ";
}
cout << endl;
}
} else {
cout << "-1" << endl;
}
return 0;
}
/*输入示例:
0 0 7 0 0 6 0 9 0
0 0 3 0 0 0 0 0 0
0 6 0 0 0 4 0 1 0
0 0 6 0 0 0 0 3 0
9 0 0 0 0 8 0 0 5
0 7 0 6 0 0 4 0 0
0 1 0 3 0 0 0 6 0
0 0 0 0 0 0 9 0 0
0 2 0 5 0 0 8 0 0*/