链接:https://leetcode-cn.com/problems/sudoku-solver/
对于每一个空白格,判断
1
−
9
1-9
1−9是否能填入,若有一个能填入则先填上进入下一层递归(填下一个空格),若都不能填入则回溯到上一格重新填。
C++代码:
class Solution {
public:
bool check(vector<vector<char>>& board,int row,int col, char num)
{
//检查能否填入字符num
int rowbegin = (row/3)*3;
int colbegin = (col/3)*3;
for(int i = rowbegin;i<rowbegin+3;i++)
{
for(int j = colbegin;j<colbegin+3;j++)
if(board[i][j]==num)
return false;
}
for(int i = 0;i<9;i++)
if(board[row][i]==num||board[i][col]==num)
return false;
return true;
}
void solveSudoku(vector<vector<char>>& board) {
backtrack(board,0,0);
}
bool backtrack(vector<vector<char>>& board,int row,int col)
{
for(int i = row;i<9;i++)
{
for(int j = col;j<9;j++)
if(board[i][j]=='.')
{
for(char k = '1';k<='9';k++)
{
if(check(board,i,j,k))
{
board[i][j] = k;
if(backtrack(board,0,0))
return true;
}
}
board[i][j] = '.';
return false;
}
}
return true;
}
};