bool check(int &n, char ch, vector<vector<char>> &board) {
int row = n / 9;
int col = n % 9;
for (int i = 0; i < 9; i++) {
if (board[row][i] == ch || board[i][col] == ch)
return false;
}
int rowApp = row / 3;
int colApp = col / 3;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
int rowNew = i + rowApp * 3;
int colNew = j + colApp * 3;
if (board[rowNew][colNew] == ch && !(rowNew == row && colNew == col)) {
return false;
}
}
return true;
}
bool DFS(vector<vector<char>>& board, int n) {
if (n == 81) {
return true;
}
int row = n / 9;
int col = n % 9;
if (board[row][col] != '.') {
return DFS(board, n + 1);
}
else
for (int k = 1; k < 10; k++) {
if (check(n, k + '0', board)) {
board[row][col] = k + '0';
if (DFS(board, n + 1))
return true;
board[row][col] = '.';
}
}
return false;
}
void solveSudoku(vector<vector<char>>& board) {
DFS(board, 0);
}