static int x=[](){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return 0;
}();
class Solution {
public:
void solveSudoku(vector<vector<char>>& board) {
solveSudokudfs(board);
}
bool solveSudokudfs(vector<vector<char> > &board)
{
for(int i = 0; i < 9; i++){ //行遍历
for(int j = 0; j < 9; j++){ //列遍历
if(board[i][j] == '.'){ //如果是 ‘.’开始试值
for(char c = '1'; c <= '9'; c++){
if(isValidSu(board, i, j, c)){ //判断这个值在目前已经有的值的情况下 是否是有效的(局部有效)
board[i][j] = c; //有效则给定这个值
if(solveSudokudfs(board)) //递归调用
return true;
else
board[i][j] = '.'; //回溯 到上一层进行下一个值的尝试
}
}
return false;//遍历过一遍for循环之后还没有成功就返回错误
}
}
}
return true;
}
bool isValidSu(vector<vector<char> > &board, int row, int col, char c) {
for(int i = 0; i < 9; i++){
if(board[row][i] == c || board[i][col] == c) return false;
if(board[row / 3 * 3 + i / 3][col / 3 * 3 + i % 3] == c) return false;
}
return true;
}
};
LetCode 37. 解数独
最新推荐文章于 2020-08-19 08:02:44 发布