Paste Search Dynamic
sudoku
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <fstream>
  4. #include <stdlib.h>
  5.  
  6. #define sudokuSize 9
  7. std::ofstream plik( "sudoku.txt");
  8. int sudokuTab[sudokuSize][sudokuSize] =
  9. {
  10.     {0, 6, 0, 7, 2, 0, 0, 4, 0},
  11.     {5, 7, 0, 3, 0, 0, 0, 0, 0},
  12.     {0, 8, 0, 0, 1, 0, 0, 7, 0},
  13.     {6, 0, 8, 2, 3, 7, 0, 0, 0},
  14.     {0, 3, 7, 0, 0, 0, 2, 8, 0},
  15.     {0, 2, 0, 8, 0, 0, 0, 3, 0},
  16.     {0, 0, 0, 0, 7, 0, 0, 0, 0},
  17.     {7, 0, 0, 4, 0, 0, 0, 0, 1},
  18.     {0, 0, 0, 0, 6, 0, 0, 2, 0}
  19. };
  20. int constSudoku[sudokuSize][sudokuSize];
  21. int licznik = 0;
  22.  
  23. //dekalracje funkcji
  24. void rozwiaz();
  25. int sprawdzKolizje(int row, int col, int n);
  26. int czyMozna(int row, int col, int n);
  27. void RozwiazSudoku(int row, int col);
  28.  
  29.  
  30.  
  31. //definicje funkcji
  32. void rozwiaz()
  33. {
  34.     licznik = 0;
  35.     RozwiazSudoku(0, 0);
  36.     std::cout << "Liczba rozwiazan sudoku: " << licznik << ".\n";
  37. }
  38.  
  39. int sprawdzKolizje(int row, int col, int n)
  40. {
  41.     int colision = 0;
  42.     int i = 0;
  43.     for( i= 0; i < sudokuSize;i++)
  44.     {
  45.         if (sudokuTab[row][i] == n || sudokuTab[i][col] == n)
  46.             return 1;
  47.     }
  48.     return colision;
  49. }
  50.  
  51.  
  52.  
  53.  
  54. int czyMozna(int row, int col, int n)
  55. {
  56.     int czyMozna = 1;
  57.     int i =0;
  58.     int j = 0;
  59.     int rowSq = (row / 3);
  60.     int colSq = (col / 3);
  61.     int rowStart = (rowSq * 3);
  62.     int colStart = (colSq * 3);
  63.     for (i = rowStart; i < (rowStart + 3); i++)
  64.     {
  65.         for (j = colStart; j < (colStart + 3); j++)
  66.         {
  67.             if (sudokuTab[i][j] == n) return 0;
  68.         }
  69.     }
  70.     return czyMozna;
  71. }
  72.  
  73. void RozwiazSudoku(int row, int col)
  74. {
  75.     if ((sudokuTab[row][col] == 0) && (constSudoku[row][col] == 0)) // czy dane komurka sudoku jest wolna
  76.     {
  77.          int n = 0;
  78.         for (n = 1; n < 10; n++) // numry od 1...9
  79.         {
  80.             //sprawdzamy czy nie powoduje kolizji i czy mozna wstawiæ
  81.             if ((sprawdzKolizje(row, col, n) == 0)  &&  czyMozna(row, col, n)==1) // jesli nie koluduje
  82.             {
  83.                 sudokuTab[row][col] = n; // wstawiamy numerek
  84.                 //to idziemy do next komórki
  85.                 if ((row == (sudokuSize - 1)) && (col == (sudokuSize - 1))){
  86.                   for (int i = 0;i < sudokuSize;i++)
  87.                     {
  88.                         for (int j = 0;j < sudokuSize;j++)
  89.                         {
  90.                             plik << sudokuTab[i][j];
  91.                         }
  92.                     }
  93.                   plik<<"\n";
  94.                   licznik++;
  95.                 }
  96.                 else if ((col + 1) < sudokuSize)
  97.                    RozwiazSudoku(row, col + 1);
  98.                 else if ((row + 1) < sudokuSize)
  99.                    RozwiazSudoku(row + 1, 0);
  100.                 sudokuTab[row][col] = 0;
  101.             }
  102.         }
  103.     }
  104.     else//idziemy do innej komórki
  105.     {
  106.         if ((col + 1) < sudokuSize)
  107.            RozwiazSudoku(row, col + 1);
  108.         else if ((row + 1) < sudokuSize)
  109.             RozwiazSudoku(row + 1, 0);
  110.     }
  111. }
  112.  
  113. int main()
  114. {
  115.     int i = 0;
  116.     int j = 0;
  117.     for (i = 0;i < sudokuSize;i++)
  118.     {
  119.         for (j = 0;j < sudokuSize;j++)
  120.         {
  121.             constSudoku[i][j] = sudokuTab[i][j];
  122.         }
  123.     }
  124.     rozwiaz();
  125.     plik.close();
  126.     system("PAUSE");
  127.     return 0;
  128. }
  129.  
Parsed in 0.023 seconds