SHARE
TWEET

Untitled

a guest Feb 27th, 2020 102 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <stdio.h>
  4.  
  5. using namespace std;
  6.  
  7. struct frecventa
  8. {
  9.     bool lin;
  10.     bool col;
  11.     bool sq;
  12. } fr[10];
  13.  
  14. struct zero
  15. {
  16.     int x;
  17.     int y;
  18. } z[82];
  19.  
  20. int sudoku[10][10], k;
  21.  
  22. void clr()
  23. {
  24.     for(int i=1; i<=9; i++)
  25.         fr[i].lin=fr[i].col=fr[i].sq=false;
  26. }
  27.  
  28. void afis()
  29. {
  30.     for(int i=1; i<=9; i++)
  31.     {
  32.         for(int j=1; j<=9; j++)
  33.             cout<<sudoku[i][j]<<" ";
  34.         cout<<endl;
  35.     }
  36. }
  37.  
  38. void frcv(int x0, int y0){
  39.     for(int i=1; i<=9; i++)
  40.         {
  41.             fr[sudoku[i][y0]].col=true;
  42.             fr[sudoku[x0][i]].lin=true;
  43.         }
  44.         int square;
  45.         if(x0%3!=0)
  46.             square=(x0/3)*3+y0/3;
  47.         else
  48.             square=(x0/3-1)*3+y0/3;
  49.         if(y0%3!=0)
  50.             square++;
  51.         switch(square)
  52.         {
  53.         case 1:
  54.         {
  55.             for(int ii=1; ii<=3; ii++)
  56.                 for(int jj=1; jj<=3; jj++)
  57.                     fr[sudoku[ii][jj]].sq=true;
  58.             break;
  59.         }
  60.         case 2:
  61.         {
  62.             for(int ii=1; ii<=3; ii++)
  63.                 for(int jj=4; jj<=6; jj++)
  64.                     fr[sudoku[ii][jj]].sq=true;
  65.             break;
  66.         }
  67.         case 3:
  68.         {
  69.             for(int ii=1; ii<=3; ii++)
  70.                 for(int jj=7; jj<=9; jj++)
  71.                     fr[sudoku[ii][jj]].sq=true;
  72.             break;
  73.         }
  74.         case 4:
  75.         {
  76.             for(int ii=4; ii<=6; ii++)
  77.                 for(int jj=1; jj<=3; jj++)
  78.                     fr[sudoku[ii][jj]].sq=true;
  79.             break;
  80.         }
  81.         case 5:
  82.         {
  83.             for(int ii=4; ii<=6; ii++)
  84.                 for(int jj=4; jj<=6; jj++)
  85.                     fr[sudoku[ii][jj]].sq=true;
  86.             break;
  87.         }
  88.         case 6:
  89.         {
  90.             for(int ii=4; ii<=6; ii++)
  91.                 for(int jj=7; jj<=9; jj++)
  92.                     fr[sudoku[ii][jj]].sq=true;
  93.             break;
  94.         }
  95.         case 7:
  96.         {
  97.             for(int ii=7; ii<=9; ii++)
  98.                 for(int jj=1; jj<=3; jj++)
  99.                     fr[sudoku[ii][jj]].sq=true;
  100.             break;
  101.         }
  102.         case 8:
  103.         {
  104.             for(int ii=7; ii<=9; ii++)
  105.                 for(int jj=4; jj<=6; jj++)
  106.                     fr[sudoku[ii][jj]].sq=true;
  107.             break;
  108.         }
  109.         case 9:
  110.         {
  111.             for(int ii=7; ii<=9; ii++)
  112.                 for(int jj=7; jj<=9; jj++)
  113.                     fr[sudoku[ii][jj]].sq=true;
  114.             break;
  115.         }
  116.         }
  117. }
  118.  
  119. void bkt(int w)
  120. {
  121.     if(w>k){
  122.         afis();
  123.         exit(0);
  124.     }
  125.     else
  126.     {
  127.         clr();
  128.         int x0=z[w].x;
  129.         int y0=z[w].y;
  130.         frcv(x0, y0);
  131.         for(int i=1;i<=9;i++)
  132.             if(!fr[i].lin && !fr[i].col && !fr[i].sq){
  133.                 sudoku[x0][y0]=i;
  134.                 cout<<endl;
  135.                 afis();
  136.                 bkt(w+1);
  137.                 sudoku[x0][y0]=0;
  138.                 clr();
  139.                 frcv(x0, y0);
  140.             }
  141.     }
  142. }
  143.  
  144. int main()
  145. {
  146.     freopen("sudoku.in", "r", stdin);
  147.     freopen("sudoku.out", "w", stdout);
  148.     for(int i=1; i<=9; i++)
  149.         for(int j=1; j<=9; j++)
  150.         {
  151.             cin>>sudoku[i][j];
  152.             if(sudoku[i][j]==0)
  153.             {
  154.                 k++;
  155.                 z[k].x=i;
  156.                 z[k].y=j;
  157.             }
  158.         }
  159.     bkt(1);
  160.     return 0;
  161. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top