class Solution {
public:
void solveSudoku(vector<vector<char> > &board) {
// Note: The Solution object is instantiated only once and is reused by each test case.
dfs(board);
}
bool dfs(vector<vector<char> > &board)
{
for(int i=0;i<=8;i++)
for(int j=0;j<=8;j++)
{
if(board[i][j]=='.')
{
for(int k=1;k<=9;k++)
{
board[i][j]=k+'0';//do
if(isValid(i,j,board)&&dfs(board))//backtracking
return true;
board[i][j]='.';//undo
}
return false;//若对该点试了9次仍没返回true,则说明这是个死胡同,返回false
}
}
return true;//最终总会有个结果的,所以最后返回true
}
bool isValid(int i,int j,vector<vector<char> > &board)
{
for(int k=0;k<=8;k++)
{
if((k!=i)&&(board[i][j] == board[k][j]))
return false;
if((k!=j)&&(board[i][j] == board[i][k]))
return false;
int row=3*(i/3)+k/3;
int col=3*(j/3)+k%3;
if((i!=row||j!=col)&&(board[row][col]==board[i][j]))
return false;
}
return true;
}
};
【leetcode】Sudoku Solver
最新推荐文章于 2019-12-29 10:19:31 发布