Pagini recente » Cod sursa (job #2354471) | Arhiva de probleme | Cod sursa (job #1838397) | Cod sursa (job #206490) | Cod sursa (job #633724)
Cod sursa(job #633724)
#include<fstream>
#include<algo.h>
using namespace std;
ofstream g("sudoku.out");
char v[10][10];
int a[10][10],lin[10][10],col[10][10],i,j,kk,k;
int cas[10][10],t;
void back(int kk)
{
if(kk==70)
{
int i,j;
for(i=1;i<=9;++i)
{
for(j=1;j<=9;++j)
g<<a[i][j]<<" ";
g<<"\n";
}
exit(0);
}
else
{
int i,j,k;
for(i=1;i<=9;++i)
for(j=1;j<=9;++j)
if(!a[i][j])
{
for(k=1;k<=9;++k)
if(!lin[i][k] && !col[k][j])
{
if(i<4 && j<4 && !cas[1][k])
{
lin[i][k]=1;
col[k][j]=1;
cas[1][k]=1;
back(kk+1);
a[i][j]=k;
//kk--;
a[i][j]=0;
lin[i][k]=0;
col[k][j]=0;
cas[1][k]=0;
}
if(i<4 && j>3 && j<7 && !cas[2][k])
{
lin[i][k]=1;
col[k][j]=1;
cas[2][k]=1;
a[i][j]=k;
back(kk+1);
//kk--;
a[i][j]=0;
lin[i][k]=0;
col[k][j]=0;
cas[2][k]=0;
}
if(i<4 && j>6 && !cas[3][k])
{
lin[i][k]=1;
col[k][j]=1;
cas[3][k]=1;
a[i][j]=k;
back(kk+1);
//kk--;
a[i][j]=0;
lin[i][k]=0;
col[k][j]=0;
cas[3][k]=0;
}
if(i<7 && i>3 && j<4 && !cas[4][k])
{
lin[i][k]=1;
col[k][j]=1;
cas[4][k]=1;
a[i][j]=k;
back(kk+1);
//kk--;
a[i][j]=0;
lin[i][k]=0;
col[k][j]=0;
cas[4][k]=0;
}
if(i>3 && i<7 && j>3 && j<7 && !cas[5][k])
{
lin[i][k]=1;
col[k][j]=1;
cas[5][k]=1;
a[i][j]=k;
back(kk+1);
//kk--;
a[i][j]=0;
lin[i][k]=0;
col[k][j]=0;
cas[5][k]=0;
}
if(i<7 && i>3 && j>6 && !cas[6][k])
{
lin[i][k]=1;
col[k][j]=1;
cas[6][k]=1;
a[i][j]=k;
back(kk+1);
//kk--;
a[i][j]=0;
lin[i][k]=0;
col[k][j]=0;
cas[6][k]=0;
}
if(i>6 && j<4 && !cas[7][k])
{
lin[i][k]=1;
col[k][j]=1;
cas[7][k]=1;
a[i][j]=k;
back(kk+1);
//kk--;
a[i][j]=0;
lin[i][k]=0;
col[k][j]=0;
cas[7][k]=0;
}
if(i>6 && j>3 && j<7 && !cas[8][k])
{
lin[i][k]=1;
col[k][j]=1;
cas[8][k]=1;
a[i][j]=k;
back(kk+1);
//kk--;
a[i][j]=0;
lin[i][k]=0;
col[k][j]=0;
cas[8][k]=0;
}
if(i>6 && j>6 && !cas[9][k])
{
lin[i][k]=1;
col[k][j]=1;
cas[9][k]=1;
a[i][j]=k;
back(kk+1);
//kk--;
a[i][j]=0;
lin[i][k]=0;
col[k][j]=0;
cas[9][k]=0;
}
}
}
}
}
int main()
{
ifstream f("sudoku.in");
for(i=1;i<=9;++i)
for(j=1;j<=9;++j)
{
f>>v[i][j];
if(v[i][j]!='0')
{
a[i][j]=v[i][j]-'0';
lin[i][a[i][j]]=1;
col[a[i][j]][j]=1;
if(i<4 && j<4)
cas[1][a[i][j]]=1;
else
if(i<4 && j>3 && j<7)
cas[2][a[i][j]]=1;
else
if(i<4 && j>6)
cas[3][a[i][j]]=1;
if(i<7 && i>3 && j<4)
cas[4][a[i][j]]=1;
else
if(i>3 && i<7 && j>3 && j<7)
cas[5][a[i][j]]=1;
else
if(i<7 && i>3 && j>6)
cas[6][a[i][j]]=1;
if(i>6 && j<4)
cas[7][a[i][j]]=1;
else
if(i>6 && j>3 && j<7)
cas[8][a[i][j]]=1;
else
if(i>6 && j>6)
cas[9][a[i][j]]=1;
++kk;
}
else
a[i][j]=0;
}
//back(kk);
g<<power(7,2);
}