class Solution {
public:
bool cheack( vector<vector<char>>& board , int row ,int col ,int val)
{
for(int i=0 ; i< board[0].size() ;i++) //检查行
{
if(board[row][i] == val )
{
return false;
}
}
for(int i=0 ; i< board.size() ;i++) //检查列
{
if(board[i][col] == val)
{
return false;
}
}
int startRow = (row / 3)*3;
int startCol = (col / 3)*3;
for(int i=startRow ; i < startRow + 3 ;i++) //检查小方块
{
for(int j=startCol ; j< startCol + 3 ;j++)
{
if(board[i][j] == val)
{
return false;
}
}
}
return true;
}
bool backtarking(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] != '.') continue;//已有的跳过
for( char k = '1' ; k<='9';k++)
{
if(cheack(board,i,j,k)) //检查当前k是否符合
{
board[i][j] = k;
if(backtarking(board)) return true; //当找到一组成功的,就不接着找了直接返回true
board[i][j] = '.';
}
}
return false ;
}
}
return true;//行和列都满足了,返回找到
}
void solveSudoku(vector<vector<char>>& board) {
bool tmp = backtarking(board);
}
};