From f2f7180909b21c29af25b87a8fb25d4cb3d335ff Mon Sep 17 00:00:00 2001 From: Aditya Chouksey Date: Fri, 24 Oct 2025 10:58:07 +0530 Subject: [PATCH] Create sudoko.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The grid uses 0 to represent empty cells. The isSafe() function ensures no duplicates in a row, column, or 3×3 box. The solveSudoku() uses backtracking: Tries a number 1–9 in each empty cell. If a number works, moves to the next cell. If stuck, it backtracks and tries a different number. The final grid is printed as the solution. --- CPP/sudoko.cpp | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 CPP/sudoko.cpp diff --git a/CPP/sudoko.cpp b/CPP/sudoko.cpp new file mode 100644 index 00000000..276b7bd9 --- /dev/null +++ b/CPP/sudoko.cpp @@ -0,0 +1,86 @@ +#include +using namespace std; + +#define N 9 + +// Function to print the Sudoku grid +void printGrid(int grid[N][N]) { + for (int row = 0; row < N; row++) { + for (int col = 0; col < N; col++) { + cout << grid[row][col] << " "; + } + cout << endl; + } +} + +// Check if placing num in grid[row][col] is valid +bool isSafe(int grid[N][N], int row, int col, int num) { + // Check row + for (int x = 0; x < N; x++) + if (grid[row][x] == num) + return false; + + // Check column + for (int x = 0; x < N; x++) + if (grid[x][col] == num) + return false; + + // Check 3x3 subgrid + int startRow = row - row % 3, startCol = col - col % 3; + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + if (grid[i + startRow][j + startCol] == num) + return false; + + return true; +} + +// Recursive backtracking function to solve Sudoku +bool solveSudoku(int grid[N][N], int row, int col) { + if (row == N - 1 && col == N) + return true; + if (col == N) { + row++; + col = 0; + } + if (grid[row][col] != 0) + return solveSudoku(grid, row, col + 1); + + for (int num = 1; num <= 9; num++) { + if (isSafe(grid, row, col, num)) { + grid[row][col] = num; + if (solveSudoku(grid, row, col + 1)) + return true; + grid[row][col] = 0; // backtrack + } + } + return false; +} + +// Main Function +int main() { + int grid[N][N] = { + {3, 0, 6, 5, 0, 8, 4, 0, 0}, + {5, 2, 0, 0, 0, 0, 0, 0, 0}, + {0, 8, 7, 0, 0, 0, 0, 3, 1}, + {0, 0, 3, 0, 1, 0, 0, 8, 0}, + {9, 0, 0, 8, 6, 3, 0, 0, 5}, + {0, 5, 0, 0, 9, 0, 6, 0, 0}, + {1, 3, 0, 0, 0, 0, 2, 5, 0}, + {0, 0, 0, 0, 0, 0, 0, 7, 4}, + {0, 0, 5, 2, 0, 6, 3, 0, 0} + }; + + cout << "Original Sudoku Puzzle:\n"; + printGrid(grid); + cout << endl; + + if (solveSudoku(grid, 0, 0)) { + cout << "Solved Sudoku:\n"; + printGrid(grid); + } else { + cout << "No solution exists!"; + } + + return 0; +}