Write a program to solve a Sudoku puzzle by filling the empty cells.
A sudoku solution must satisfy all of the following rules:
- Each of the digits
1-9
must occur exactly once in each row. - Each of the digits
1-9
must occur exactly once in each column. - Each of the the digits
1-9
must occur exactly once in each of the 93x3
sub-boxes of the grid.
Empty cells are indicated by the character '.'
.
A sudoku puzzle...
...and its solution numbers marked in red.
Note:
- The given board contain only digits
1-9
and the character'.'
. - You may assume that the given Sudoku puzzle will have a single unique solution.
- The given board size is always
9x9
.
题意:数独
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board, int i,int j,int c)
{
for (int k = 0; k < 9; k++)
{
if (board[i][k] == c)
return false;
if (board[k][j] == c)
return false;
}
int begin = (i / 3);
int end = (j / 3);
for (int k = begin * 3; k < (begin+1) * 3; k++)
{
for (int s = end * 3; s < (end + 1) * 3; s++)
{
if (board[k][s] == c)
return false;
}
}
return true;
}
bool Helper(vector<vector<char>>& board)
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
if (board[i][j] == '.')
{
for (char c = '1'; c <= '9'; c++)
{
if (isValidSudoku(board, i, j, c))
{
board[i][j] = c;
if (Helper(board))
{
return true;
}
else
{
board[i][j] = '.';
}
}
}
return false;
}
}
}
return true;
}
void solveSudoku(vector<vector<char>>& board)
{
Helper(board);
}
};