#include <iostream> #include <vector> using namespace std; bool isValid(vector<vector<int>>& mat, int r, int c, char x){ int N = 9; for(int i = 0; i < N; i++){ if(mat[r][i] == x || mat[i][c] == x) return false; } int startRow = (r / 3) * 3; int startCol = (c / 3) * 3; for(int i = startRow; i < startRow + 3; i++){ for(int j = startCol; j < startCol + 3; j++){ if(mat[i][j] == x) return false; } } return true; } bool backtracking(vector<vector<int>>& mat, int i, int j){ int N = 9; if(j == N){ // return backtracking(mat, i + 1, 0); i++;j = 0; } if(i == N){ return true; } if(mat[i][j] != 0){ return backtracking(mat, i, j + 1); } for(int x = 1; x <= N; x++){ if(!isValid(mat, i, j, x)) continue; mat[i][j] = x; if(backtracking(mat, i, j + 1)){ return true; } mat[i][j] = 0; } return false; } int main() { const int N = 9; vector<vector<int>> mat(N, vector<int>(N)); for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ cin >> mat[i][j]; } } backtracking(mat,0,0); for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ cout << mat[i][j] << " "; } cout << endl; } } // 64 位输出请用 printf("%lld")