diff options
author | zedarider <ymherklotz@gmail.com> | 2016-09-08 21:03:48 +0200 |
---|---|---|
committer | zedarider <ymherklotz@gmail.com> | 2016-09-08 21:03:48 +0200 |
commit | 3f8e364dcf8f8cf24a790850f5a04b66e8ba613b (patch) | |
tree | 516a20956e77c3afcdb667cdee12d3ea84add9d9 | |
parent | d8eb32cf50731b1dd8e637c700d03bd7a7b87d3b (diff) | |
download | sudoku_solver-master.tar.gz sudoku_solver-master.zip |
-rw-r--r-- | include/sudoku_solver.hpp | 5 | ||||
-rw-r--r-- | resources/grid.txt | 18 | ||||
-rw-r--r-- | src/main.cpp | 36 | ||||
-rw-r--r-- | src/sudoku_solver.cpp | 22 |
4 files changed, 69 insertions, 12 deletions
diff --git a/include/sudoku_solver.hpp b/include/sudoku_solver.hpp index c3a685b..fc84714 100644 --- a/include/sudoku_solver.hpp +++ b/include/sudoku_solver.hpp @@ -33,10 +33,13 @@ public: SudokuSolver(); ~SudokuSolver(); - void printGrid(); + void printGrid(std::vector<int> &grid); + void initGrid(std::vector<int> &new_grid); bool checkBox(unsigned int &grid_location, std::vector<int> &curr_grid); bool checkRow(unsigned int &grid_location, std::vector<int> &curr_grid); bool checkColumn(unsigned int &grid_location, std::vector<int> &curr_grid); + bool emptyLocation(unsigned int &curr_location); + bool isValid(unsigned int &grid_location, std::vector<int> &curr_grid); int getBox(unsigned int grid_location); protected: private: diff --git a/resources/grid.txt b/resources/grid.txt index d888b9d..1ee8793 100644 --- a/resources/grid.txt +++ b/resources/grid.txt @@ -1,9 +1,9 @@ -5 3 0 0 7 0 0 0 0 -6 0 0 1 9 5 0 0 0 -0 9 8 0 0 0 0 6 0 -8 0 0 0 6 0 0 0 3 -4 0 0 8 0 3 0 0 1 -7 0 0 0 2 0 0 0 6 -0 6 0 0 0 0 2 8 0 -0 0 0 4 1 9 0 0 5 -0 0 0 0 8 0 0 7 9 +0 0 0 2 0 0 0 0 4 +0 9 0 0 8 0 5 0 1 +0 0 0 0 0 7 0 0 8 +0 0 0 0 4 0 2 0 0 +0 8 6 0 0 0 3 5 0 +0 0 1 0 7 0 0 0 0 +2 0 0 6 0 0 0 0 0 +1 0 5 0 3 0 0 8 0 +7 0 0 0 0 5 0 0 0 diff --git a/src/main.cpp b/src/main.cpp index 23009a7..4af1257 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,8 +5,42 @@ using namespace std; int main(int argc, char** argv) { cout << "Sudoku Solver v1.1" << endl << endl; + vector<int> sudoku_grid; + unsigned int curr_location = 0; + bool solved = false; + bool forward = true; + SudokuSolver solver; - solver.printGrid(); + solver.initGrid(sudoku_grid); + solver.printGrid(sudoku_grid); + + while(!solved) { + if(curr_location == GRIDSIZE*GRIDSIZE) { + solved = true; + } else if(solver.emptyLocation(curr_location)) { + ++sudoku_grid[curr_location]; + if(sudoku_grid[curr_location] > GRIDSIZE) { + sudoku_grid[curr_location] = 0; + forward = false; + --curr_location; + } else if(solver.isValid(curr_location, sudoku_grid)) { + ++curr_location; + forward = true; + } else { + forward = true; + } + } else { + if(forward) { + ++curr_location; + } else { + --curr_location; + } + } + } + + cout << endl; + solver.printGrid(sudoku_grid); + return 0; } diff --git a/src/sudoku_solver.cpp b/src/sudoku_solver.cpp index 54888b8..792a362 100644 --- a/src/sudoku_solver.cpp +++ b/src/sudoku_solver.cpp @@ -22,7 +22,7 @@ SudokuSolver::~SudokuSolver() { } -void SudokuSolver::printGrid() { +void SudokuSolver::printGrid(vector<int> &grid) { int count = 0; int row = 0; int sep_count = 0; @@ -52,6 +52,10 @@ void SudokuSolver::printGrid() { } } +void SudokuSolver::initGrid(std::vector<int> &new_grid) { + new_grid = this->grid; +} + bool SudokuSolver::checkBox(unsigned int &grid_location, vector<int> &curr_grid) { int box_location = getBox(grid_location); @@ -96,6 +100,22 @@ bool SudokuSolver::checkColumn(unsigned int &grid_location, vector<int> &curr_gr return true; } +bool SudokuSolver::emptyLocation(unsigned int &curr_location) { + if(grid[curr_location] == 0) { + return true; + } + + return false; +} + +bool SudokuSolver::isValid(unsigned int &grid_location, std::vector<int> &curr_grid) { + if(checkColumn(grid_location, curr_grid) && checkRow(grid_location, curr_grid) && checkBox(grid_location, curr_grid)) { + return true; + } + + return false; +} + int SudokuSolver::getBox(unsigned int grid_location) { int column = grid_location % GRIDSIZE; |