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:
bool ok(vector<vector<char> > &board, int r, int c, char a)
{
for(int i=0; i<9; i++)
{
if(board[r][i] != '.' && board[r][i] == a)
return false;
if(board[i][c] != '.' && board[i][c] == a)
return false;
if(board[r/3*3+i/3][c/3*3+i%3] != '.' && board[r/3*3+i/3][c/3*3+i%3] == a)
return false;
}
return true;
}
bool dfs(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 a='1'; a<='9'; a++)
{
if(ok(board, i, j, a))
{
board[i][j] = a;
if(dfs(board))
return true;
else
board[i][j] = '.';
}
}
return false;
}
}
}
return true;
}
void solveSudoku(vector<vector<char> > &board)
{
dfs(board);
}
};