Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream fin("sudoku.in");
- ofstream fout("sudoku.out");
- int Grila[9][9], nr0,sol_valid;
- struct{int lin,col;}pozitii[81];
- int linie_valida(int lin)
- {
- int i,j;
- for(i=0;i<8;i++)
- for(j=i+1;j<9;j++)
- if(Grila[lin][i]==Grila[lin][j] && Grila[lin][i] && Grila[lin][j])return 0;
- return 1;
- }
- int coloana_valida(int col)
- {
- int i,j;
- for(i=0;i<8;i++)
- for(j=i+1;j<9;j++)
- if(Grila[i][col]==Grila[j][col] && Grila[i][col] && Grila[j][col])return 0;
- return 1;
- }
- int submat_valida(int lin_s, int col_s)
- {
- int v[9],k=0;
- for(int i=lin_s;i<lin_s+3;i++)
- for(int j=col_s;j<col_s+3;j++)
- if(Grila[i][j]) v[k++]=Grila[i][j];
- for(int i=0;i<k-1;i++)
- for(int j=i+1;j<k;j++)
- if(v[i]==v[j] && v[i] && v[j]) return 0;
- return 1;
- }
- void Back(int k)
- {
- int val;
- int x,y;
- for(val=1;val<=9 && !sol_valid; val++)
- {
- x=pozitii[k].lin;y=pozitii[k].col;
- Grila[x][y]=val;
- if(linie_valida(x) &&coloana_valida(y) && submat_valida(x/3*3,y/3*3))
- if(k+1==nr0) sol_valid=1;
- else Back(k+1);
- if(sol_valid==0) Grila[x][y]=0;
- }
- }
- void Citire()
- {
- for(int i=0;i<9;i++)
- for(int j=0;j<9;j++)
- {
- fin>>Grila[i][j];
- if(Grila[i][j]==0)
- pozitii[nr0].lin=i,pozitii[nr0++].col=j;
- }
- }
- void Afisare()
- {
- if(sol_valid)
- {
- for(int i=0;i<9;i++)
- {
- for(int j=0;j<9;j++)fout<<Grila[i][j]<<' ';
- fout<<'\n';
- }
- }
- else fout<<"Imposibil";
- }
- int main()
- {
- Citire();
- Back(0);
- Afisare();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment