Pagini recente » Cod sursa (job #3180257) | Cod sursa (job #3181561) | Cod sursa (job #2979093) | Cod sursa (job #2460954) | Cod sursa (job #3182500)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("sudoku.in");
ofstream g("sudoku.out");
int a[10][10], frec[40][11], i, j,okk;
bool linie(int x, int nr)
{
for(int i=1; i<=9; i++)
if(a[x][i]==nr)return false;
return true;
}
bool coloana(int y, int nr)
{
for(int i=1; i<=9; i++)
if(a[i][y]==nr)return false;
return true;
}
void bkt(int x, int y)
{
if (!okk){
int ok=1;
for(int i=1; i<=9; i++)
for(int j=1; j<=9; j++)
{
if(a[i][j]==0)ok=0;
}
if(ok==1)
{
for(int i=1; i<=9; i++)
{
for(int j=1; j<=9; j++)
g<<a[i][j]<<" ";
g<<endl;
}
okk=1;
}
else if(a[x][y]==0)
{
int xx, yy,prev=0;
xx=(x-1)/3+1;
yy=(y-1)/3+1;
for(int numar=1; numar<=9; numar++)
{
frec[xx*10+yy][prev] = 0;
if(linie(x,numar) && coloana(y,numar) && frec[xx*10+yy][numar]==0)
{
frec[xx*10+yy][numar] = 1;
a[x][y]=numar;
prev = numar;
if(y<9&&!okk)
bkt(x,y+1);
else
{
y=1;
if (x<9&&!okk)
bkt(x+1,y);
}
}
}
a[x][y]=0;
}
else
{
if(y<9&&!okk)
bkt(x,y+1);
else
{
y=1;
if (x<9&&!okk)
bkt(x+1,y);
}
}
}
}
int main()
{
int x, y;
for(i=1; i<=9; i++)
for(j=1; j<=9; j++)
{
f>>a[i][j];
x=(i-1)/3+1;
y=(j-1)/3+1;
frec[x*10+y][a[i][j]]=1;
}
bkt(1,1);
return 0;
}