SUDOKU OYUNU BİLİNDİĞİ GİBİ ZEVKLİ BİR BULMACA OYUNUDUR.BU BULMACADA KURAL YATAY VE DİKEY BİR ŞEKİLDE AYRICA HER 3*3 MATRİSLERİN İÇERİSİNDE Kİ TÜM RAKAMLAR DA 1-9 ARASINDA OLMALIDIR BUNU RANDOM OLARAK TA YAPILABİLİR.
#include<iostream>
using namespace std;
int p[9][9],q[9][2],r[9][2];
void eliminate(int a,int b)
{
if(a>0)
{
for(int x=0;x<a;x++)
{
for(int i=0;i<9;i++)
if(q[i][0]==p[x][b])
{
q[i][1]=1;
break;
}
}
}
if(b>0)
{
for(int x=0;x<b;x++)
{
for(int i=0;i<9;i++)
if(q[i][0]==p[a][x])
{
q[i][1]=1;
break;
}
}
}
if(a%3==1)
a-=1;
else if(a%3==2)
a-=2;
if(b%3==1)
b-=1;
else if(b%3==2)
b-=2;
for(int x=a;x<=a+2;x++)
{
for(int y=b;y<=b+2;y++)
if(p[x][y]!=0)
{
for(int i=0;i<9;i++)
if(q[i][0]==p[x][y])
{
q[i][1]=1;
break;
}
}
}
}
void choose(int a,int b)
{
int l=0;
if(a>0&&b<6)
{
if(b%3==0&&b+3<=8)
b+=3;
else if(b%3==1&&b+3<=8)
b+=2;
else if(b%3==2&&b+3<=8)
b+=1;
a-=1;
for(int x=b;x<=b+2;x++)
{
r[l][0]=p[a][x];
l++;
}
}
int count=0;
for(int i=0;i<9;i++)
{
if(q[i][1]==0)
{
for(int p=0;p<9;p++)
if(r[p][0]!=0&&r[p][0]==q[i][0])
count++;
if(count==0)
{
r[l][0]=q[i][0];
l++;
break;
}
count=0;
} }
}
void appointment()
{
for(int i=0;i<9;i++)
{
q[i][0]=i+1;
q[i][1]=0;
}
for(int i=0;i<9;i++)
{
r[i][0]=0;
r[i][1]=0;
}
}
bool control(int a,int b,int c)
{
int count=0;
for(int x=0;x<b;x++)
if(c==p[a][x])
count++;
for(int x=0;x<a;x++)
if(c==p[x][b])
count++;
if(a%3==1)
a-=1;
else if(a%3==2)
a-=2;
if(b%3==1)
b-=1;
else if(b%3==2)
b-=2;
for(int x=a;x<=a+2;x++)
{
for(int y=b;y<=b+2;y++)
if(c==p[x][y])
count++;
}
if(count==0)
return true;
}
void start()
{
int y;
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
eliminate(i,j);
choose(i,j);
for(int h=0;h<9;h++)
if(r[h][0]!=0)
{
y=r[h][0];
if(control(i,j,y)==true)
{
p[i][j]=y;
r[h][1]=1;
break;
}
}
appointment();
}
}
}
void print()
{
cout<<endl<<endl;
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
cout<<” “<<p[i][j];
cout<<endl<<endl;
}
}
main()
{
appointment(); // q ya değer atadık
start();
print();
system (“pause”);
}
MEHMET SALİH DEVECİ
YAZILIM MÜHENDİSİ