summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzedarider <ymherklotz@gmail.com>2016-09-08 21:03:48 +0200
committerzedarider <ymherklotz@gmail.com>2016-09-08 21:03:48 +0200
commit3f8e364dcf8f8cf24a790850f5a04b66e8ba613b (patch)
tree516a20956e77c3afcdb667cdee12d3ea84add9d9
parentd8eb32cf50731b1dd8e637c700d03bd7a7b87d3b (diff)
downloadsudoku_solver-master.tar.gz
sudoku_solver-master.zip
Finished the first part of the sudoku solverHEADmaster
-rw-r--r--include/sudoku_solver.hpp5
-rw-r--r--resources/grid.txt18
-rw-r--r--src/main.cpp36
-rw-r--r--src/sudoku_solver.cpp22
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;