nicuvlad76

Untitled

Nov 21st, 2020
822
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. ifstream fin("sudoku.in");
  5. ofstream fout("sudoku.out");
  6.  
  7. int Grila[9][9], nr0,sol_valid;
  8.  
  9. struct{int lin,col;}pozitii[81];
  10.  
  11. int linie_valida(int lin)
  12. {
  13.   int i,j;
  14.   for(i=0;i<8;i++)
  15.     for(j=i+1;j<9;j++)
  16.     if(Grila[lin][i]==Grila[lin][j] && Grila[lin][i] && Grila[lin][j])return 0;
  17.   return 1;
  18. }
  19.  
  20. int coloana_valida(int col)
  21. {
  22.   int i,j;
  23.   for(i=0;i<8;i++)
  24.     for(j=i+1;j<9;j++)
  25.     if(Grila[i][col]==Grila[j][col] && Grila[i][col] && Grila[j][col])return 0;
  26.   return 1;
  27. }
  28.  
  29. int submat_valida(int lin_s, int col_s)
  30. {
  31.     int v[9],k=0;
  32.     for(int i=lin_s;i<lin_s+3;i++)
  33.         for(int j=col_s;j<col_s+3;j++)
  34.         if(Grila[i][j]) v[k++]=Grila[i][j];
  35.     for(int i=0;i<k-1;i++)
  36.         for(int j=i+1;j<k;j++)
  37.         if(v[i]==v[j] && v[i] && v[j]) return 0;
  38.     return 1;
  39.  
  40. }
  41. void Back(int k)
  42. {
  43.     int val;
  44.     int x,y;
  45.     for(val=1;val<=9 && !sol_valid; val++)
  46.     {
  47.         x=pozitii[k].lin;y=pozitii[k].col;
  48.         Grila[x][y]=val;
  49.         if(linie_valida(x) &&coloana_valida(y) && submat_valida(x/3*3,y/3*3))
  50.             if(k+1==nr0) sol_valid=1;
  51.             else Back(k+1);
  52.         if(sol_valid==0) Grila[x][y]=0;
  53.     }
  54. }
  55. void Citire()
  56. {
  57.     for(int i=0;i<9;i++)
  58.         for(int j=0;j<9;j++)
  59.     {
  60.         fin>>Grila[i][j];
  61.         if(Grila[i][j]==0)
  62.             pozitii[nr0].lin=i,pozitii[nr0++].col=j;
  63.     }
  64. }
  65.  
  66. void Afisare()
  67. {
  68.     if(sol_valid)
  69.     {
  70.         for(int i=0;i<9;i++)
  71.         {
  72.             for(int j=0;j<9;j++)fout<<Grila[i][j]<<' ';
  73.             fout<<'\n';
  74.         }
  75.     }
  76.     else fout<<"Imposibil";
  77. }
  78. int main()
  79. {
  80.     Citire();
  81.     Back(0);
  82.     Afisare();
  83.  
  84.     return 0;
  85. }
  86.  
Advertisement
Add Comment
Please, Sign In to add comment