今天是五一劳动节啊。首先向所有的劳动人问好,祝大家节日快乐。
意林的杂志最后几页上有数独的数学游戏,今天我也凑个热闹写了一个代码来算答案,因为程序比较小,没写注释。请高手帮着看看。
#include
<
iostream
>
using namespaces std;
int a[ 10 ][ 10 ];
ing b[ 9 ],c[ 9 ];
int p = 0 ;
int m = 0 ,n = 0 ;
int x1 = 1 ,y1 = 1 ,box1 = 1 ;
void start();
void scanx( int )
void scany( int );
void scanbox( int );
void refusebc();
int check();
int take();
int make();
void out ();
int main() ... {
start();
set();
return 0;
}
// ----------------------------------------------------
void start() ... {
int x,y;
a[][]=...{0};
b[]=...{0};
for(;n=0;)...{
cout<<"inputer x,y:"
cin>>x>>y;
cout<<"inputer n:"
cin>>n;
a[x][y]=n;
}
//---------------------------------------------------
void out()...{
for(int i=1;i<=9;i++)...{
for(int j=1;j<=9;j++)...{
cout<<a[i][j]<<" "
}
cout<<endl;
}
}
//--------------------------------------------------
void refusebc()...{
b[]=...{0};
c[]=...{0};
}
//----------------------------------------------------
void scanx(int x)...{
int k=1;
for(int i=1;i<=9:i++)...{
n=a[i][x];
for(int z=0;z<=p;z++)...{
if(n==0||b[z]==n)
k=0;
}
if(k=0)...{
b[p]=n;
p++;
}
}
}
}
// --------------------------------------
void scany( int y) ... {
int k=1;
for(int i=1;i<=9:i++)...{
n=a[y][i];
for(int z=0;z<=p;z++)...{
if(n==0||b[z]==n)
k=0;
}
if(k=0)...{
b[p]=n;
p++;
}
}
}
}
// --------------------------------------
void scanbox( int box) ... {
if(box>1&&box<=3)...{
for(int i=1;i<=3;i++:...{
for(int j=1;j<=3;j++)...{
n=a[i][3(box-1)+j];
for(int z=0;z<=p;z++)...{
if(n==0||b[z]==n)
k=0;
}
if(k=0)...{
b[p]=n;
p++;
}
}
}
if(box>4&&box<=6)...{
for(int i=1;i<=3;i++:...{
for(int j=1;j<=3;j++)...{
n=a[i+3][3(box-4)+j];
for(int z=0;z<=p;z++)...{
if(n==0||b[z]==n)
k=0;
}
if(k=0)...{
b[p]=n;
p++;
}
}
}
if(box>7&&box<=9)...{
for(int i=1;i<=3;i++:...{
for(int j=1;j<=3;j++)...{
n=a[i+6][3(box-7)+j];
for(int z=0;z<=p;z++)...{
if(n=0||b[z]=n)
k=0;
}
if(k=0)...{
b[p]=n;
p++;
}
}
}
}
//---------------------------
void make()...{
refusebc();
scanx(x1);
scany(y1);
scanbox(box1);
for(int i=0;i<=8;i++)...{
c[i]=i+1;
}
for(int i=0;i<=8;i++)...{
n=b[i];
if(!n=0)...{
c[n-i]=0;
}
}
}
//-----------------------------------------
int take()...{
make();
for(int i=m;i<=8;i++)...{
if(!c[i]==0)...{
m=i;
return c[i];
break;
}
}
}
//-----------------------------
int check()...{
for(int i=1;i<=3;i++0...{
if(y1>=(3(i-1)+1)&&y1<=(3(i-1)+3))...{
if(x1<=1&&x1<=3) box1=3(i-1)+1;
if(x1<=4&&x1<=6)box1=3(i-1)+2;
if(x1<=7&&x1<=9) box1=3(i-1)+3;
}
}
for(int i=1;i<=9;i++)...{
for(int j=1;j<=9;j++)...{
if(a[i][j]=0) return 0;
}
}
return 1;
}
//------------------------------------
int set()...{
int x,y;
if(check()==0)...{
if(a[x1][y1]=0)...{
x=x1;
y=y1;
a[x][y]=take();
}
if(x1=9)
y1++;
else
x1++;
}
set();
if(icheck==0)...{
out();
return 0;
}
a[x][y]=0;
x1=x;
y1=y;
}
using namespaces std;
int a[ 10 ][ 10 ];
ing b[ 9 ],c[ 9 ];
int p = 0 ;
int m = 0 ,n = 0 ;
int x1 = 1 ,y1 = 1 ,box1 = 1 ;
void start();
void scanx( int )
void scany( int );
void scanbox( int );
void refusebc();
int check();
int take();
int make();
void out ();
int main() ... {
start();
set();
return 0;
}
// ----------------------------------------------------
void start() ... {
int x,y;
a[][]=...{0};
b[]=...{0};
for(;n=0;)...{
cout<<"inputer x,y:"
cin>>x>>y;
cout<<"inputer n:"
cin>>n;
a[x][y]=n;
}
//---------------------------------------------------
void out()...{
for(int i=1;i<=9;i++)...{
for(int j=1;j<=9;j++)...{
cout<<a[i][j]<<" "
}
cout<<endl;
}
}
//--------------------------------------------------
void refusebc()...{
b[]=...{0};
c[]=...{0};
}
//----------------------------------------------------
void scanx(int x)...{
int k=1;
for(int i=1;i<=9:i++)...{
n=a[i][x];
for(int z=0;z<=p;z++)...{
if(n==0||b[z]==n)
k=0;
}
if(k=0)...{
b[p]=n;
p++;
}
}
}
}
// --------------------------------------
void scany( int y) ... {
int k=1;
for(int i=1;i<=9:i++)...{
n=a[y][i];
for(int z=0;z<=p;z++)...{
if(n==0||b[z]==n)
k=0;
}
if(k=0)...{
b[p]=n;
p++;
}
}
}
}
// --------------------------------------
void scanbox( int box) ... {
if(box>1&&box<=3)...{
for(int i=1;i<=3;i++:...{
for(int j=1;j<=3;j++)...{
n=a[i][3(box-1)+j];
for(int z=0;z<=p;z++)...{
if(n==0||b[z]==n)
k=0;
}
if(k=0)...{
b[p]=n;
p++;
}
}
}
if(box>4&&box<=6)...{
for(int i=1;i<=3;i++:...{
for(int j=1;j<=3;j++)...{
n=a[i+3][3(box-4)+j];
for(int z=0;z<=p;z++)...{
if(n==0||b[z]==n)
k=0;
}
if(k=0)...{
b[p]=n;
p++;
}
}
}
if(box>7&&box<=9)...{
for(int i=1;i<=3;i++:...{
for(int j=1;j<=3;j++)...{
n=a[i+6][3(box-7)+j];
for(int z=0;z<=p;z++)...{
if(n=0||b[z]=n)
k=0;
}
if(k=0)...{
b[p]=n;
p++;
}
}
}
}
//---------------------------
void make()...{
refusebc();
scanx(x1);
scany(y1);
scanbox(box1);
for(int i=0;i<=8;i++)...{
c[i]=i+1;
}
for(int i=0;i<=8;i++)...{
n=b[i];
if(!n=0)...{
c[n-i]=0;
}
}
}
//-----------------------------------------
int take()...{
make();
for(int i=m;i<=8;i++)...{
if(!c[i]==0)...{
m=i;
return c[i];
break;
}
}
}
//-----------------------------
int check()...{
for(int i=1;i<=3;i++0...{
if(y1>=(3(i-1)+1)&&y1<=(3(i-1)+3))...{
if(x1<=1&&x1<=3) box1=3(i-1)+1;
if(x1<=4&&x1<=6)box1=3(i-1)+2;
if(x1<=7&&x1<=9) box1=3(i-1)+3;
}
}
for(int i=1;i<=9;i++)...{
for(int j=1;j<=9;j++)...{
if(a[i][j]=0) return 0;
}
}
return 1;
}
//------------------------------------
int set()...{
int x,y;
if(check()==0)...{
if(a[x1][y1]=0)...{
x=x1;
y=y1;
a[x][y]=take();
}
if(x1=9)
y1++;
else
x1++;
}
set();
if(icheck==0)...{
out();
return 0;
}
a[x][y]=0;
x1=x;
y1=y;
}