C++源程序解 游戏数字九宫格
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#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;i
a[i][j]=k[i][j];
}
/*
for(i=0;i
a[i][j]=0;
*/
cout<<"请根据提示输入九宫格的数据(以0作为结束)"<
cin>>r;
while(r>0)
{ l=1;
cout<<"请分别输入第"<
cin>>i;
if(i==0) break;
cout<<"列数:";
cin>>j;
cout<<"值为:";
cin>>a[i][j];
l++;
}
for(i=0;i
//cout<<"输入a["<//cin>>a[i][j];
}
cout<
for(i=0;i
for(j=0;j<3;j++)
{
B[i][j]=0;
}
for(j=0;j
}
Search(a,b,n);//函数搜寻空缺处可填数据
sort_b(b,n);
cout<<"空缺个数:"<
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<
cout<
Fblank(n,b,B,a);
G: cout<
}
void Search(int a[M][M],int b[M1][M2],int &n1)
{
int i,l1,l2,j,k,m,n=0;
for(i=0;i
if(a[i][j]==0)
{
m=3;
for(k=1;k<=M;k++)
{
for(l1=0;l1
for(l2=0;l2
if(l1
{
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;l1
for(l2=0;l2
if(l1
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;i
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<
}