遍历81个点,如果该点是数字则需要进行判断是否合格,如果是’.'则跳过判断到下一个点。
class Solution {
public:
bool res;
bool isValidSudoku(vector<vector<char>>& bd) {
res= true;
dfs(bd,0);
return res;
}
bool valid(vector<vector<char>> &bd,int x,int y){
for(int i=0;i<9;i++)//判断行是否合格
if(i!=x&&bd[x][y]==bd[i][y])return false;
for(int i=0;i<9;i++)//判断列是否合格
if(i!=y&&bd[x][y]==bd[x][i])return false;
int t1 = x/3*3,t2 = y/3*3;
for(int i=t1;i<t1+3;i++)
for(int j=t2;j<t2+3;j++)
if(i!=x&&j!=y&&bd[i][j]==bd[x][y])return false;
return true;
}
void dfs(vector<vector<char>> &bd,int count){
if(!res)return ;
if(count==81){
res= true;
return;
}
int row = count/9,col =count%9;
if(bd[row][col]=='.')dfs(bd,count+1);
else {
if(!valid(bd,row,col)){
res = false;
return ;
}
dfs(bd,count+1);
}
}
};