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 };

 

posted @ 2020-03-17 20:29  Jinxiaobo0509  阅读(197)  评论(0)    收藏  举报