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-9must occur exactly once in each row. - Each of the digits
1-9must occur exactly once in each column. - Each of the the digits
1-9must occur exactly once in each of the 93x3sub-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-9and the character'.'. - You may assume that the given Sudoku puzzle will have a single unique solution.
- The given board size is always
9x9.
AC code;
class Solution {
public:
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 c = '1'; c <= '9'; ++c) {
if (isLegal(board, i, j, c)) {
board[i][j] = c;
if (solve(board)) return true;
else board[i][j] = '.';
}
}
return false;
}
}
}
return true;
}
bool isLegal(vector<vector<char>> board, int x, int y, char c) {
for (int i = 0; i < 9; ++i) {
if (board[x][i] != '.' && board[x][i] == c) return false;
if (board[i][y] != '.' && board[i][y] == c) return false;
if (board[3 * (x / 3) + i / 3][3 * (y / 3) + i % 3] != '.' &&
board[3 * (x / 3) + i / 3][3 * (y / 3) + i % 3] == c) return false;
}
return true;
}
};
Runtime: 184 ms, faster than 6.58% of C++ online submissions for Sudoku Solver.