Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <stdio.h>
- using namespace std;
- struct frecventa
- {
- bool lin;
- bool col;
- bool sq;
- } fr[10];
- struct zero
- {
- int x;
- int y;
- } z[82];
- int sudoku[10][10], k;
- void clr()
- {
- for(int i=1; i<=9; i++)
- fr[i].lin=fr[i].col=fr[i].sq=false;
- }
- void afis()
- {
- for(int i=1; i<=9; i++)
- {
- for(int j=1; j<=9; j++)
- cout<<sudoku[i][j]<<" ";
- cout<<endl;
- }
- }
- void frcv(int x0, int y0){
- for(int i=1; i<=9; i++)
- {
- fr[sudoku[i][y0]].col=true;
- fr[sudoku[x0][i]].lin=true;
- }
- int square;
- if(x0%3!=0)
- square=(x0/3)*3+y0/3;
- else
- square=(x0/3-1)*3+y0/3;
- if(y0%3!=0)
- square++;
- switch(square)
- {
- case 1:
- {
- for(int ii=1; ii<=3; ii++)
- for(int jj=1; jj<=3; jj++)
- fr[sudoku[ii][jj]].sq=true;
- break;
- }
- case 2:
- {
- for(int ii=1; ii<=3; ii++)
- for(int jj=4; jj<=6; jj++)
- fr[sudoku[ii][jj]].sq=true;
- break;
- }
- case 3:
- {
- for(int ii=1; ii<=3; ii++)
- for(int jj=7; jj<=9; jj++)
- fr[sudoku[ii][jj]].sq=true;
- break;
- }
- case 4:
- {
- for(int ii=4; ii<=6; ii++)
- for(int jj=1; jj<=3; jj++)
- fr[sudoku[ii][jj]].sq=true;
- break;
- }
- case 5:
- {
- for(int ii=4; ii<=6; ii++)
- for(int jj=4; jj<=6; jj++)
- fr[sudoku[ii][jj]].sq=true;
- break;
- }
- case 6:
- {
- for(int ii=4; ii<=6; ii++)
- for(int jj=7; jj<=9; jj++)
- fr[sudoku[ii][jj]].sq=true;
- break;
- }
- case 7:
- {
- for(int ii=7; ii<=9; ii++)
- for(int jj=1; jj<=3; jj++)
- fr[sudoku[ii][jj]].sq=true;
- break;
- }
- case 8:
- {
- for(int ii=7; ii<=9; ii++)
- for(int jj=4; jj<=6; jj++)
- fr[sudoku[ii][jj]].sq=true;
- break;
- }
- case 9:
- {
- for(int ii=7; ii<=9; ii++)
- for(int jj=7; jj<=9; jj++)
- fr[sudoku[ii][jj]].sq=true;
- break;
- }
- }
- }
- void bkt(int w)
- {
- if(w>k){
- afis();
- exit(0);
- }
- else
- {
- clr();
- int x0=z[w].x;
- int y0=z[w].y;
- frcv(x0, y0);
- for(int i=1;i<=9;i++)
- if(!fr[i].lin && !fr[i].col && !fr[i].sq){
- sudoku[x0][y0]=i;
- cout<<endl;
- afis();
- bkt(w+1);
- sudoku[x0][y0]=0;
- clr();
- frcv(x0, y0);
- }
- }
- }
- int main()
- {
- freopen("sudoku.in", "r", stdin);
- freopen("sudoku.out", "w", stdout);
- for(int i=1; i<=9; i++)
- for(int j=1; j<=9; j++)
- {
- cin>>sudoku[i][j];
- if(sudoku[i][j]==0)
- {
- k++;
- z[k].x=i;
- z[k].y=j;
- }
- }
- bkt(1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement