平时很喜欢玩数独,但是看到这个题我都懵了
这题主要是二维数据的递归,以及判断每行每列 每个3*3格内都要判断是否有重复的
class Solution {
private:
bool backtracking(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 k='1';k<='9';k++)
{
if(isvalid(i,j,k,board))
{
board[i][j]=k;
if(backtracking(board)) return true;
board[i][j]='.';
}
}
return false;
}
}
}
return true;
}
bool isvalid(int row,int col,char val,vector<vector<char>>&board)
{
for(int i=0;i<9;i++)//判断行中是否重复
{
if(board[row][i]==val)
{return false;}
}
for(int j=0;j<9;j++)//判断列中是否有重复
{
if(board[j][col]==val)
{return false;}
}
int starrow=(row/3)*3;
int starcol=(col/3)*3;
for(int i=starrow;i<starrow+3;i++)
{
for(int j=starcol;j<starcol+3;j++)
{
if(board[i][j]==val)
{return false;}
}
}
return true;
}
public:
void solveSudoku(vector<vector<char>>& board) {
backtracking(board);
}
};