Write a program to solve a Sudoku puzzle by filling the empty cells.
Empty cells are indicated by the character '.'
.
You may assume that there will be only one unique solution.
A sudoku puzzle...
...and its solution numbers marked in red.
dfs,一直寻找,不行返回即可:
1 class Solution { 2 public: 3 void solveSudoku(vector<vector<char>>& board) { 4 doSudoku(board); 5 } 6 7 bool checkValid(vector<vector<char>>&board, int x, int y) 8 { 9 for(int i = 0; i < 9; i++){ 10 if(i!=x) 11 if(board[i][y] == board[x][y]) return false; 12 } 13 14 for(int j = 0; j < 9; j++){ 15 if(j != y) 16 if(board[x][j] == board[x][y]) return false; 17 } 18 19 for(int i = (x/3) * 3; i < (x/3 + 1) * 3; ++i){ 20 for(int j = (y/3) * 3; j < (y/3 + 1) * 3; ++j){ 21 if((i!=x) || (j != y)) 22 if(board[x][y] == board[i][j]) return false; 23 } 24 } 25 return true; 26 } 27 28 bool doSudoku(vector<vector<char>> & board) 29 { 30 for(int row = 0; row < 9; ++row){ 31 for(int col = 0; col < 9; ++col){ 32 if(board[row][col] == '.'){ 33 for(int i = 1; i <= 9; ++i){ 34 board[row][col] = '0' + i; 35 if(checkValid(board, row, col)){ 36 if(doSudoku(board)){ 37 return true; 38 } 39 } 40 board[row][col] = '.'; 41 } 42 return false; 43 } 44 } 45 } 46 return true; 47 } 48 };