Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.22 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int pusta();
  5. int jest(int krzad, int kkol, int n);
  6. int sudoku_glowna();
  7. void dajTablica();
  8.  
  9. int tablica[9][9] = {
  10.     { 8, 0, 0, 0, 0, 0, 0, 0, 0 },
  11.     { 0, 0, 3, 6, 0, 0, 0, 0, 0 },
  12.     { 0, 7, 0, 0, 9, 0, 2, 0, 0 },
  13.     { 0, 5, 0, 0, 0, 7, 0, 0, 0 },
  14.     { 0, 0, 0, 0, 4, 5, 7, 0, 0 },
  15.     { 0, 0, 0, 1, 0, 0, 0, 3, 0 },
  16.     { 0, 0, 1, 0, 0, 0, 0, 6, 8 },
  17.     { 0, 0, 8, 5, 0, 0, 0, 1, 0 },
  18.     { 0, 9, 0, 0, 0, 0, 4, 0, 0 }
  19. };
  20.  
  21.  
  22. int rzad, kol;
  23.  
  24. void main()
  25. {
  26.     int i, j, rozwiazanie = 0;
  27.     char ch;
  28.     printf("Sudoku: \n");
  29.     dajTablica();
  30.     printf("Wcisnij 'T' jesli chcesz rozwiazac sudoku. \nWcisnij 'N' jesli nie chcesz rozwiazac.");
  31.     ch = getc(stdin);
  32.     if (ch == 'n')
  33.         exit(0);
  34.     else if (ch == 't')
  35.     {
  36.         rozwiazanie = sudoku_glowna();
  37.         if (rozwiazanie)
  38.         {
  39.             printf("\n\nRozwiazane sudoku:\n\n");
  40.             dajTablica();
  41.             printf("\nMILEGO DNIA :)\n\n");
  42.         }
  43.         else
  44.             printf("\nBrak rozwiazania!\n\n");
  45.         getc(stdin);
  46.     }
  47.  
  48. }
  49.  
  50. int pusta()
  51. {
  52.     int i, j;
  53.     for (i = rzad; i <= 8; i++)
  54.         for (j = 0; j <= 8; j++)
  55.         {
  56.             if (tablica[i][j] == 0)
  57.             {
  58.                 rzad = i; kol = j;
  59.                 return 1;
  60.             }
  61.         }
  62.     return 0;
  63.  
  64. }
  65.  
  66. int jest(int krzad, int kkol, int n)
  67. {
  68.     int i, j;
  69.     int rzadStart = (krzad / 3) * 3;
  70.     int kolStart = (kkol / 3) * 3;
  71.  
  72.     for (j = 0; j <= 8; j++) {
  73.         if (tablica[krzad][j] == n)
  74.             return 0;
  75.         if (tablica[j][kkol] == n)
  76.             return 0;
  77.     }
  78.  
  79.     for (i = rzadStart; i <= rzadStart + 2; i++)
  80.         for (j = kolStart; j <= kolStart + 2; j++)
  81.             if (tablica[i][j] == n)
  82.                 return 0;
  83.  
  84.     return 1;
  85. }
  86.  
  87. int sudoku_glowna()
  88. {
  89.     int d;
  90.     int przad, pkol;
  91.     if (!pusta())
  92.         return 1;
  93.  
  94.     for (d = 1; d <= 9; d++)
  95.     {
  96.         if (jest(rzad, kol, d))
  97.         {
  98.             tablica[rzad][kol] = d;
  99.             przad = rzad; pkol = kol;
  100.             if (sudoku_glowna())
  101.                 return 1;
  102.             rzad = przad; kol = pkol;
  103.             tablica[rzad][kol] = 0;
  104.         }
  105.     }
  106.     return 0;
  107. }
  108.  
  109.  
  110. void dajTablica()
  111. {
  112.     int i, j;
  113.     printf("\n");
  114.     for (i = 0; i<9; i++)
  115.     {
  116.         printf("\t");
  117.         for (j = 0; j<9; j++)
  118.         {
  119.             if (j == 0)
  120.                 printf("| ");
  121.             if (tablica[i][j] == 0)
  122.                 printf(". ");
  123.             else
  124.                 printf("%d ", tablica[i][j]);
  125.             if ((j + 1) % 3 == 0)
  126.                 printf("| ");
  127.         }
  128.         if ((i + 1) % 3 == 0)
  129.             printf("\n");
  130.         printf("\n");
  131.     }
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement