#include <array> #include<iostream> #include <vector> using namespace std; vector<vector<int>> matrix(9, vector<int>(9,0)); bool flag = false; bool check(int n){ int h = n / 9; int l = n % 9; // 检查行, 这时需要保持列不变 for(int x = 0; x < 9; x++){ if(x!=h && matrix[x][l] == matrix[h][l] ){ return false; } } // 检查列, 这时需要保持行不变 for(int x = 0; x < 9; x++){ if(x!=l && matrix[h][x] == matrix[h][l] ){ return false; } } // 检查九宫格内的数字 for(int i = h / 3 * 3; i < h/3*3+3; i++){ for(int j = l / 3 * 3; j < l/3*3+3; j++){ if((i != h || j != l) && matrix[i][j] == matrix[h][l]){ return false; } } } return true; } void dfs(int n){ if(n == 81){ for(int i = 0; i < 9; ++i){ for(int j = 0; j < 8; ++j){ cout << matrix[i][j] << " "; } cout << matrix[i][8] << endl; } flag = true; return; } int h = n / 9; int l = n % 9; if(matrix[h][l] == 0){ for(int i = 1; i <= 9; ++i){ matrix[h][l] = i; if(check(n)){ dfs(n+1); if(flag) return; } } matrix[h][l] = 0; }else{ dfs(n+1); } } int main(){ for(int i = 0; i < 9; ++i){ for(int j = 0; j < 9; ++j){ cin >> matrix[i][j]; } } dfs(0); }