37. 解数独
1 //参考全排列模板 2 class Solution 3 { 4 int row[9][9] = {0};//某一行的某个数 5 int col[9][9] = {0};//某一列的某个数 6 int cell[3][3][9] = {0};//某一个九宫格中的某个数 7 public: 8 void solveSudoku(vector<vector<char>>& board) 9 { 10 for(int i = 0;i < 9;i ++) 11 { 12 for(int j = 0;j < 9;j ++) 13 { 14 if(board[i][j] != '.') 15 { 16 int val = board[i][j] - '1'; 17 row[i][val] = col[j][val] = cell[i/3][j/3][val] = true; 18 } 19 } 20 } 21 dfs(board,0,0); 22 } 23 24 bool dfs(vector<vector<char>>& board,int x,int y) 25 { 26 if(y == 9) x++,y = 0; 27 if(x == 9) return true; 28 if(board[x][y] != '.') return dfs(board,x,y + 1); 29 30 for(int i = 0;i < 9;i ++) 31 { 32 if(!row[x][i] && !col[y][i] && !cell[x/3][y/3][i]) 33 { 34 board[x][y] = '1' + i; 35 row[x][i] = col[y][i] = cell[x/3][y/3][i] = true; 36 if(dfs(board,x,y + 1)) return true; 37 38 board[x][y] = '.'; 39 row[x][i] = col[y][i] = cell[x/3][y/3][i] = false; 40 } 41 } 42 return false; 43 } 44 };
Mamba never out

浙公网安备 33010602011771号