Problem: Fill a 9x9 grid so that each row, column, and 3x3 subgrid contains all digits from 1 to 9.
Approach:
Code Example:
#include <iostream>
#include <vector>
using namespace std;
bool isValid(vector<vector<char>>& board, int row, int col, char num) {
for (int i = 0; i < 9; i++) {
if (board[row][i] == num || board[i][col] == num ||
board[row - row % 3 + i / 3][col - col % 3 + i % 3] == num)
return false;
}
return true;
}
bool solveSudoku(vector<vector<char>>& board) {
for (int row = 0; row < 9; row++) {
for (int col = 0; col < 9; col++) {
if (board[row][col] == '.') {
for (char num = '1'; num <= '9'; num++) {
if (isValid(board, row, col, num)) {
board[row][col] = num;
if (solveSudoku(board))
return true;
board[row][col] = '.';
}
}
return false;
}
}
}
return true;
}
void printBoard(vector<vector<char>>& board) {
for (auto& row : board) {
for (auto& cell : row) {
cout << cell << " ";
}
cout << endl;
}
}
int main() {
vector<vector<char>> board = {
{'5', '3', '.', '.', '7', '.', '.', '.', '.'},
{'6', '.', '.', '1', '9', '5', '.', '.', '.'},
{'.', '9', '8', '.', '.', '.', '.', '6', '.'},
{'8', '.', '.', '.', '6', '.', '.', '.', '3'},
{'4', '.', '.', '8', '.', '3', '.', '.', '1'},
{'7', '.', '.', '.', '2', '.', '.', '.', '6'},
{'.', '6', '.', '.', '.', '.', '2', '8', '.'},
{'.', '.', '.', '4', '1', '9', '.', '.', '5'},
{'.', '.', '.', '.', '8', '.', '.', '7', '9'}
};
solveSudoku(board);
printBoard(board);
return 0;
}