Sudoku Solver
Write a program to solve a Sudoku puzzle by filling the empty cells.
Empty cells are indicated by the character '.'
.
You may assume that there will be only one unique solution.
A sudoku puzzle...
...and its solution numbers marked in red.
class Solution {
public:
//每个点进行判断,1-9是否适合,判断其横、竖、小三角,是否合法。不合法,回溯
void solveSudoku(vector<vector<char>>& board) {
solve(board);
}
bool solve(vector<vector <char> >& board)
{
for(int i=0;i<9;i++)
for(int j=0;j<9;j++)
{
if(board[i][j]=='.')
{
for(int k=1;k<=9;k++)
{
board[i][j]=k+'0';
if(isValid(board,i,j))
{
if(solve(board))
return true;
}
board[i][j]='.';
}
return false;
}
}
return true;
}
bool isValid(vector< vector<char> >& board,int x,int y)//判断这个点的合法性
{
for(int i=0;i<9;i++)
{
if(x!=i && board[i][y]==board[x][y])
return false;
}
for(int i=0;i<9;i++)
{
if(y!=i && board[x][i]==board[x][y])
return false;
}
for(int i=x/3*3;i<(x/3+1)*3;i++)
{
for(int j=y/3*3;j<(y/3+1)*3;j++)
{
if(x!=i && y!=j && board[i][j]==board[x][y])
return false;
}
}
return true;
}
};