Commit eb8e7347 by nrossol

### Initial Commit

parents
sudokuSolver.cpp 0 → 100644
 #include #include #include //Backtracking & recursive algorithm to solve sudoku puzzle if possible, to be implemented in python with a GUI later. //Sudoku rules: The grid has 81 squares: 9 boxes of 9 squares. Each box must contain //all numbers 1-9 in its squares, and each number can appear only once in any row, //column, or box. bool solveSudoku(int **grid){ std::pair zeroIndex; //row,col of the zero to be filled. bool foundZero = findZero(grid, zeroIndex); if(foundZero){ for(int i = 1; i < 10; ++i){ grid[zeroIndex.first,zeroIndex.second] = i; if(checkSolution(grid, zeroIndex.first, zeroIndex.second)){ solveSudoku(grid); } } grid[zeroIndex.first,zeroIndex.second] = 0; return false; } else { return true; //solved } } //Helper functions: //checks the solution for a given index and returns true if valid. bool checkSolution(int **grid, const int &row, const int &col){ for(int i = 0; i < 9; ++i){ if(grid[i][col] == grid[row][col] && i != row) { return false; } else if (grid[row][i] == grid[row][col] && i != col){ return false; } } return true; } //Finds the index of the next zero to be solved. bool findZero(int **grid, std::pair &zeroIndex){ for(int i = 0; i < 9; ++i){ for(int j = 0; j < 9; ++j){ if(grid[i][j] == 0) { zeroIndex.first = i; zeroIndex.second = j; return true; } } } return false; } //Prints the board. void printBoard(){ for(int i = 0; i < 9; ++i){ for(int j = 0; j < 9; ++j){ std::cout << grid{i][j] << " ";} } std::cout << std::endl; } } int main() { //Easy Grid: int grid[9][9] = { { 1, 2, 3, 0, 5, 6 ,7 ,8, 9 }, {0, 5, 6, 7, 8, 9, 1, 2, 3}, {7, 8, 0, 1, 2, 3, 4, 5, 6}, {2, 1, 4, 3, 6, 5, 0, 9 ,7}, {3, 0, 5, 8, 9, 7, 2, 1,4}, {8, 9, 7, 2, 1, 4, 3, 6, 0}, {5, 3, 1, 6, 4, 2, 9, 0, 8}, {6 ,4 ,2, 9, 0, 8, 5, 3, 1}, {9, 7, 8, 0, 3, 1, 6, 4, 2} }; //Medium Grid: //Hard Grid: if(solveSudoku(grid)==true) {std::cout << "Solved!" << std::endl;} else {std::cout << "Unsolvable :(" << std::endl;} printBoard(); return 0; } \ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!