#include <iostream> #include <vector> using namespace std; bool isValidNum(const vector<vector<int>>& sudoku, int x, int y, int num) { //检查(x,y)所在的行和列有没有重复 for(int i = 0; i < 9; ++i) { if(sudoku[x][i] == num || sudoku[i][y] == num) { return false; } } //检查(x,y)所在的3x3方格里有没有重复 int start_row = (x / 3) * 3; int start_col = (y / 3) * 3; for(int i = 0; i < 3; ++i) { for(int j = 0; j < 3; ++j) { if(sudoku[start_row + i][start_col + j] == num) { return false; } } } return true; } bool backTrack(vector<vector<int>>& sudoku) { for(int i = 0; i < 9; ++i) { for(int j = 0; j < 9; ++j) { if(sudoku[i][j] == 0) { for(int k = 1; k <= 9; ++k) { if(isValidNum(sudoku, i, j, k)) { sudoku[i][j] = k; if(backTrack(sudoku)) { return true; } sudoku[i][j] = 0; //撤销 回溯 } } return false; } } } return true; } int main() { vector<vector<int>> sudoku(9, vector<int>(9, 0)); for(int i = 0; i < 9; ++i) { for(int j = 0; j < 9; ++j) { cin >> sudoku[i][j]; } } backTrack(sudoku); for(int i = 0; i < 9; ++i) { for(const int& n: sudoku[i]) { cout << n << " "; } cout << endl; } return 0; }