C++源程序解 游戏数字九宫格

#define M 9
#define M1 M*M
#define M2 M+3
#include "iostream.h"
#include "stdlib.h"
#include "stdio.h"
void Search(int a[M][M],int b[M1][M2],int &n1);//寻找空缺处可填数据并以n1返回空缺数
void Output_b(int b[M1][M2]);//输出空缺处可填数据
void Output_a(int a[M][M]);
int JudgeRepeat(int i,int j,int m,int B[M1][3],int a[M][M]);//判断ij处所填数据是否发生重复
int Fblank(int n,int b[M1][M2],int B[M1][3],int a[M][M]);//填空数组B充当栈的功能
void sort_b(int b[M1][M2],int n);//给数组b排序
void main()
{
int i,j,a[M][M],b[M1][M2],B[M1][3],r,l;
int n=0;//记录空缺个数
int k[M][M]={{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0}};
for(i=0;ifor(j=0;j{
a[i][j]=k[i][j];
}
/*
for(i=0;ifor(j=0;j{
a[i][j]=0;
*/
cout<<"请根据提示输入九宫格的数据(以0作为结束)"<cout<<"请输入1以示开始";
cin>>r;
while(r>0)
{ l=1;
cout<<"请分别输入第"<cout<<"行数:";
cin>>i;
if(i==0) break;
cout<<"列数:";
cin>>j;
cout<<"值为:";
cin>>a[i][j];
l++;
}
for(i=0;ifor(j=0;j{
//cout<<"输入a["<//cin>>a[i][j];
}
cout<Output_a(a); //输出原数组a
for(i=0;i{
for(j=0;j<3;j++)
{
B[i][j]=0;
}
for(j=0;jb[i][j]=0;
}
Search(a,b,n);//函数搜寻空缺处可填数据
sort_b(b,n);
cout<<"空缺个数:"<Output_b(b);
if(n==0) goto G;
while(b[0][0]<2)
{
a[b[0][1]][b[0][2]]=b[0][3];
Search(a,b,n);//函数搜寻空缺处可填数据
if(n==0) goto G;
sort_b(b,n);

}
cout<Output_b(b);
cout<for(i=0;iB[i][0]=b[i][0];
Fblank(n,b,B,a);
G: cout<Output_a(a); //输出计算所得数组a
}
void Search(int a[M][M],int b[M1][M2],int &n1)
{

int i,l1,l2,j,k,m,n=0;
for(i=0;ifor(j=0;j{
if(a[i][j]==0)
{
m=3;
for(k=1;k<=M;k++)
{
for(l1=0;l1if(a[i][l1]==k) break;
for(l2=0;l2if(a[l2][j]==k) break;
if(l1else
{
b[n][m]=k;
m++;
}

}
b[n][0]=m-3;
b[n][1]=i;
b[n][2]=j;
n++;

}

}
n1=n;
}
void Output_b(int b[M1][M2])
{
int i,j;
for(i=0;i{
cout<<"第"<for(j=3;j

;j++)
cout<cout<<"(所处坐标是:"<<"("<cout<}
}

int JudgeRepeat(int i,int j,int m,int B[M1][3],int a[M][M])
{
int t,l1,l2;
for(l1=0;l1if(a[i][l1]==B[m][2]&&l1!=j) break;
for(l2=0;l2if(a[l2][j]==B[m][2]&&l2!=i) break;
if(l1else t=1;
return t;
}

int Fblank(int n,int b[M1][M2],int B[M1][3],int a[M][M])
{
int m=0;
K:
if(m{
while(B[m][1]==B[m][0]&&m!=0)
{
B[m][1]=0;
a[b[m][1]][b[m][2]]=0;
B[m][2]=0;
m--;
}
B[m][1]++;
B[m][2]=b[m][B[m][1]+2];
a[b[m][1]][b[m][2]]=B[m][2];
if(JudgeRepeat(b[m][1],b[m][2],m,B,a)==1)
{
m++;
goto K;
}
else
{
if(B[m][1]==B[m][0])
{
B[m][1]=0;
a[b[m][1]][b[m][2]]=0;
B[m][2]=0;
m--;
goto K;
}
else goto K;
}

}
else return 0;
}
void sort_b(int b[M1][M2],int n)
{
int i,j,k,p[M2];
for(i=0;ifor(j=i+1;j{
if(b[i][0]>b[j][0])
{
for(k=0;k{
p[k]=b[i][k];
b[i][k]=b[j][k];
b[j][k]=p[k];
}
}
}
}
void Output_a(int a[M][M])
{
int i,j;
for(i=0;i{
for(j=0;j{
cout<}
cout<}
}



相关文档
最新文档