Advertisement
Guest User

Untitled

a guest
Oct 6th, 2020
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. #include "Grid.h"
  2. #include "iostream"
  3. #include "vector"
  4. #include <math.h>
  5.  
  6. bool Grid::checkPossible(unsigned int digit, unsigned int columnNr, unsigned int lineNr) {
  7.  
  8.     for (int i = 0; i < 9; ++i) {
  9.         if(_grid[lineNr][i] == digit)
  10.             return false;
  11.     }
  12.     for (int i = 0; i < 9; ++i) {
  13.         if(_grid[i][columnNr] == digit)
  14.             return false;
  15.     }
  16.     unsigned int columnNr0 = (std::floor(columnNr/3))*3;
  17.     unsigned int lineNr0 = (std::floor(lineNr/3))*3;
  18.     for (int i = 0; i < 3; ++i) {
  19.         for (int j = 0; j < 3; ++j) {
  20.             if(_grid[columnNr0+i][lineNr0+j] == digit)
  21.                 return false;
  22.         }
  23.     }
  24.     return true;
  25. }
  26.  
  27. bool Grid::checkFinished() {
  28.     for (unsigned int i = 0; i < 9; i++)
  29.     {
  30.         for (unsigned int j = 0; j < 9; j++)
  31.         {
  32.             if (_grid[j][i] == 10) {
  33.                 return false;
  34.             }
  35.         }
  36.     }
  37.     return true;
  38. }
  39.  
  40. void Grid::print() {
  41.     std::cout << "-------" << std::endl;
  42.     for (unsigned x = 0; x < 9; x++)
  43.     {
  44.         for (unsigned int y = 0; y < 9; y++)
  45.         {
  46.             std::cout << _grid[x][y] << " ";
  47.         }
  48.         std::cout << std::endl;
  49.     }
  50.     std::cout << std::endl << "------" << std::endl;
  51. }
  52.  
  53. bool Grid::solve() {
  54.     for (unsigned int x = 0; x < 9 ; x++)
  55.     {
  56.         for (unsigned int y = 0; y < 9; y++)
  57.         {
  58.             if (checkFinished())
  59.             {
  60.                 Grid::print();
  61.                 return true;
  62.             }
  63.  
  64.             if (_grid[y][x] == 10) {
  65.                 for (unsigned int i = 1; i < 10; i++)
  66.                 {
  67.                     if (checkPossible(i, x, y)) {
  68.                         _grid[y][x] = i;
  69.                         if (Grid::solve())
  70.                             return true;
  71.                         _grid[y][x] = 10;
  72.                     }
  73.                 }
  74.             }
  75.         }
  76.     }
  77.     return false;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement