Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Grid.h"
- #include "iostream"
- #include "vector"
- #include <math.h>
- bool Grid::checkPossible(unsigned int digit, unsigned int columnNr, unsigned int lineNr) {
- for (int i = 0; i < 9; ++i) {
- if(_grid[lineNr][i] == digit)
- return false;
- }
- for (int i = 0; i < 9; ++i) {
- if(_grid[i][columnNr] == digit)
- return false;
- }
- unsigned int columnNr0 = (std::floor(columnNr/3))*3;
- unsigned int lineNr0 = (std::floor(lineNr/3))*3;
- for (int i = 0; i < 3; ++i) {
- for (int j = 0; j < 3; ++j) {
- if(_grid[columnNr0+i][lineNr0+j] == digit)
- return false;
- }
- }
- return true;
- }
- bool Grid::checkFinished() {
- for (unsigned int i = 0; i < 9; i++)
- {
- for (unsigned int j = 0; j < 9; j++)
- {
- if (_grid[j][i] == 10) {
- return false;
- }
- }
- }
- return true;
- }
- void Grid::print() {
- std::cout << "-------" << std::endl;
- for (unsigned x = 0; x < 9; x++)
- {
- for (unsigned int y = 0; y < 9; y++)
- {
- std::cout << _grid[x][y] << " ";
- }
- std::cout << std::endl;
- }
- std::cout << std::endl << "------" << std::endl;
- }
- bool Grid::solve() {
- for (unsigned int x = 0; x < 9 ; x++)
- {
- for (unsigned int y = 0; y < 9; y++)
- {
- if (checkFinished())
- {
- Grid::print();
- return true;
- }
- if (_grid[y][x] == 10) {
- for (unsigned int i = 1; i < 10; i++)
- {
- if (checkPossible(i, x, y)) {
- _grid[y][x] = i;
- if (Grid::solve())
- return true;
- _grid[y][x] = 10;
- }
- }
- }
- }
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement