题目大意:填写数独
分析:dfs。注意得到第一个解就要及时返回,否则就会出错。
代码:
class Solution {
public:
void solveSudoku(vector<vector<char>>& board) {
solve(board);
}
bool solve(vector<vector<char>>& board){
for(int i = 0;i < board.size();i++){
for(int j = 0;j < board[0].size();j++){
if(board[i][j] == '.'){
for(char m = '1';m <= '9';m++){
board[i][j] = m;
if(isValid(board,i,j) && solve(board))
return true;
board[i][j] = '.';
}
return false;
}
}
}
return true;
}
bool isValid(vector<vector<char>>& board,int row,int col){
for(int i = 0;i < 9;i++){
if(i != col && board[row][i] == board[row][col])
return false;
}
for(int i = 0;i < 9;i++){
if(i != row && board[i][col] == board[row][col])
return false;
}
int beginRow = 3 * (row / 3);
int beginCol = 3 * (col / 3);
for(int i = beginRow;i < beginRow + 3;i++){
for(int j = beginCol;j < beginCol + 3;j++){
if(i != row && j != col && board[i][j] == board[row][col])
return false;
}
}
return true;
}
};