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 process(vector<vector<char> > &board, vector<vector<int> > &flag)
{
for (int i = 0; i < 9; ++i)
for (int j = 0; j < 9; ++j)
{
if ('.' == board[i][j])
{
for (int k = 0; k < 9; ++k)
{
int val = 1 << k;
if (flag[0][i] & val || flag[1][j] & val || flag[2][(i/3)*3 + j/3] & val)
continue;
board[i][j] = k + '1';
flag[0][i] |= val;
flag[1][j] |= val;
flag[2][(i/3)*3 + j/3] |= val;
if (process(board, flag))
return true;
else
{
board[i][j] = '.';
flag[0][i] ^= val;
flag[1][j] ^= val;
flag[2][(i/3)*3 + j/3] ^= val;
}
}
return false;
}
}
return true;
}
void solveSudoku(vector<vector<char> > &board)
{
vector< vector<int> > flag(3, vector<int>(9, 0));
for (int i = 0; i < 9; i++)
for(int j = 0; j < 9; j++)
{
if ('.' == board[i][j])
continue;
int val = 1 << (board[i][j] - '1');
flag[0][i] |= val;
flag[1][j] |= val;
flag[2][(i/3)*3 + j/3] |= val;
}
process(board, flag);
}
};