Advertisement
Guest User

sudoku.cpp

a guest
Dec 13th, 2014
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.97 KB | None | 0 0
  1. #include <iostream>
  2. #include <Windows.h>
  3. #include <conio.h>
  4.  
  5. using namespace std;
  6.  
  7. char sudoku[9][9];
  8.  
  9. void printSudoku(bool);
  10. void recursiveScan();
  11. void method1(bool &);
  12. void method2(bool &);
  13. bool checkBox(int, int, char);
  14.  
  15. int main()
  16. {
  17.     for (int i = 0; i < 9; i++)
  18.     {
  19.         for (int j = 0; j < 9; j++)
  20.         {
  21.             sudoku[i][j] = ' ';
  22.         }
  23.     }
  24.     printSudoku(false);
  25.     printSudoku(true);
  26.     system("pause");
  27.     system("CLS");
  28.     recursiveScan();
  29.     system("pause");
  30.     return 0;
  31. }
  32.  
  33. void printSudoku(bool input)
  34. {
  35.     COORD cursor = { 0, 0 };
  36.     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cursor);
  37.     char key;
  38.     for (int i = 0; i < 9; i++)
  39.     {
  40.         for (int j = 0; j < 9; j++)
  41.         {
  42.             switch (j)
  43.             {
  44.             case 0:
  45.             {
  46.                 switch (i)
  47.                 {
  48.                 case 1:
  49.                 case 2:
  50.                 case 4:
  51.                 case 5:
  52.                 case 7:
  53.                 case 8:
  54.                 {
  55.                     cout << char(196)
  56.                         << char(197)
  57.                         << char(196)
  58.                         << char(197)
  59.                         << char(196)
  60.                         << char(186)
  61.                         << char(196)
  62.                         << char(197)
  63.                         << char(196)
  64.                         << char(197)
  65.                         << char(196)
  66.                         << char(186)
  67.                         << char(196)
  68.                         << char(197)
  69.                         << char(196)
  70.                         << char(197)
  71.                         << char(196)
  72.                         << '\n';
  73.                     break;
  74.                 }
  75.                 case 3:
  76.                 case 6:
  77.                 {
  78.                     cout << char(205)
  79.                         << char(205)
  80.                         << char(205)
  81.                         << char(205)
  82.                         << char(205)
  83.                         << char(206)
  84.                         << char(205)
  85.                         << char(205)
  86.                         << char(205)
  87.                         << char(205)
  88.                         << char(205)
  89.                         << char(206)
  90.                         << char(205)
  91.                         << char(205)
  92.                         << char(205)
  93.                         << char(205)
  94.                         << char(205)
  95.                         << '\n';
  96.                     break;
  97.                 }
  98.                 default:
  99.                 {
  100.                     break;
  101.                 }
  102.                 }
  103.                 break;
  104.             }
  105.             case 1:
  106.             case 2:
  107.             case 4:
  108.             case 5:
  109.             case 7:
  110.             case 8:
  111.             {
  112.                 cout << char(179);
  113.                 break;
  114.             }
  115.             case 3:
  116.             case 6:
  117.             {
  118.                 cout << char(186);
  119.                 break;
  120.             }
  121.             default:
  122.                 break;
  123.             }
  124.             if (input)
  125.             {
  126.                 do
  127.                 {
  128.                     key = _getch();
  129.                 } while (!strchr("123456789 ", key));
  130.                 sudoku[i][j] = key;
  131.             }
  132.             cout << sudoku[i][j];
  133.         }
  134.         cout << '\n';
  135.     }
  136. }
  137.  
  138. void recursiveScan()
  139. {
  140.     bool meth1, meth2;
  141.     do
  142.     {
  143.         printSudoku(false);
  144.         method1(meth1);
  145.         method2(meth2);
  146.         Sleep(500);
  147.     } while (meth1 || meth2);
  148. }
  149.  
  150. void method1(bool &meth1)
  151. {
  152.     meth1 = false;
  153.     bool boxes[9];
  154.     for (int i = 0; i < 9; i++)
  155.     {
  156.         for (int j = 0; j < 9; j++)
  157.         {
  158.             if (sudoku[i][j] != ' ')
  159.             {
  160.                 continue;
  161.             }
  162.             for (int k = 0; k < 9; k++)
  163.             {
  164.                 boxes[k] = true;
  165.             }
  166.             for (int ii = 0; ii < 9; ii++)
  167.             {
  168.                 if (sudoku[ii][j] != ' ')
  169.                 {
  170.                     boxes[(sudoku[ii][j] - '0') - 1] = false;
  171.                 }
  172.             }
  173.             for (int jj = 0; jj < 9; jj++)
  174.             {
  175.                 if (sudoku[i][jj] != ' ')
  176.                 {
  177.                     boxes[(sudoku[i][jj] - '0') - 1] = false;
  178.                 }
  179.             }
  180.             for (int ii = i - (i % 3); ii < i - (i % 3) + 3; ii++)
  181.             {
  182.                 for (int jj = j - (j % 3); jj < j - (j % 3) + 3; jj++)
  183.                 {
  184.                     if (sudoku[ii][jj] != ' ')
  185.                     {
  186.                         boxes[(sudoku[ii][jj] - '0') - 1] = false;
  187.                     }
  188.                 }
  189.             }
  190.             int options = 0;
  191.             char answer;
  192.             for (int k = 0; k < 9; k++)
  193.             {
  194.                 if (boxes[k] == true)
  195.                 {
  196.                     options++;
  197.                     if (options > 1)
  198.                     {
  199.                         break;
  200.                     }
  201.                     answer = k + 1 + '0';
  202.                 }
  203.             }
  204.             if (options == 1)
  205.             {
  206.                 sudoku[i][j] = answer;
  207.                 meth1 = true;
  208.             }
  209.         }
  210.     }
  211. }
  212.  
  213. void method2(bool &meth2)
  214. {
  215.     meth2 = false;
  216.     int options;
  217.     int answeri, answerj;
  218.     for (char n = '1'; n <= '9'; n++)
  219.     {
  220.         for (int i = 0; i < 9; i++)
  221.         {
  222.             options = 0;
  223.             for (int j = 0; j < 9; j++)
  224.             {
  225.                 if (checkBox(i, j, n))
  226.                 {
  227.                     options++;
  228.                     if (options > 1)
  229.                     {
  230.                         break;
  231.                     }
  232.                     answerj = j;
  233.                 }
  234.             }
  235.             if (options == 1)
  236.             {
  237.                 sudoku[i][answerj] = n;
  238.                 meth2 = true;
  239.             }
  240.         }
  241.         for (int j = 0; j < 9; j++)
  242.         {
  243.             options = 0;
  244.             for (int i = 0; i < 9; i++)
  245.             {
  246.                 if (checkBox(i, j, n))
  247.                 {
  248.                     options++;
  249.                     if (options > 1)
  250.                     {
  251.                         break;
  252.                     }
  253.                     answeri = i;
  254.                 }
  255.             }
  256.             if (options == 1)
  257.             {
  258.                 sudoku[answeri][j] = n;
  259.                 meth2 = true;
  260.             }
  261.         }
  262.         for (int i = 0; i <= 6; i += 3)
  263.         {
  264.             for (int j = 0; j <= 6; j += 3)
  265.             {
  266.                 options = 0;
  267.                 for (int ii = i; ii < i + 3; ii++)
  268.                 {
  269.                     for (int jj = j; jj < j + 3; jj++)
  270.                     {
  271.                         if (checkBox(ii, jj, n))
  272.                         {
  273.                             options++;
  274.                             if (options > 1)
  275.                             {
  276.                                 break;
  277.                             }
  278.                             answeri = ii;
  279.                             answerj = jj;
  280.                         }
  281.                     }
  282.                 }
  283.                 if (options == 1)
  284.                 {
  285.                     sudoku[answeri][answerj] = n;
  286.                     meth2 = true;
  287.                 }
  288.             }
  289.         }
  290.     }
  291. }
  292.  
  293. bool checkBox(int i, int j, char n)
  294. {
  295.     if (sudoku[i][j] != ' ')
  296.         return false;
  297.     for (int ii = 0; ii < 9; ii++)
  298.     {
  299.         if (sudoku[ii][j] == n)
  300.         {
  301.             return false;
  302.         }
  303.     }
  304.     for (int jj = 0; jj < 9; jj++)
  305.     {
  306.         if (sudoku[i][jj] == n)
  307.         {
  308.             return false;
  309.         }
  310.     }
  311.     for (int ii = i - (i % 3); ii < i - (i % 3) + 3; ii++)
  312.     {
  313.         for (int jj = j - (j % 3); jj < j - (j % 3) + 3; jj++)
  314.         {
  315.             if (sudoku[ii][jj] == n)
  316.             {
  317.                 return false;
  318.             }
  319.         }
  320.     }
  321.     return true;
  322. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement