📄 migongchengxu.txt
字号:
#include "stdio.h"
#include"stdlib.h"
#include "time.h"
#define m 6
#define n 8
struct stype
{
int x,y,pre;
}sq[400];
int mg[m+1][n+1];
int zx[8],zy[8];
void printlujin(int rear)//输出迷宫路径
{
int i;
i=rear;
do
{ printf("(%d,%d)←",sq[i].x,sq[i].y);
i=sq[i].pre;
}while (i!=0);
printf("\n");
}
void migonglujin()
{
int k;
A:
printf("\n你想知道迷宫的出路吗?(1/0):");
scanf("%d",&k);
if(k==1)
goto B;
else
if(k==0)
{printf("\n在等待当中……\n");
goto A;
}
else
{ printf("你输入有误!");
printf("请重新输入:");
goto A;
}
B:
{
int i,j,x,y,v,front,rear,find;
zx[1]=-1;zx[2]=-1;zx[3]=0;zx[4]=1;
zx[5]=1;zx[6]=1;zx[7]=0;zx[8]=-1;
zy[1]=0;zy[2]=1;zy[3]=1;zy[4]=1;
zy[5]=0;zy[6]=-1;zy[7]=-1;zy[8]=-1;
sq[1].x=1;sq[1].y=1;sq[1].pre=0;find=0; //从(1,1)开始搜索
front=1;rear=1;mg[1][1]=-1;
while(front<=rear&&!find)
{x=sq[front].x;y=sq[front].y;
for (v=1;v<=8;v++)//循环扫描8个方向
{
i=x+zx[v];j=y+zy[v]; // 选择一个前进的方向
if (mg[i][j]==0) //如果方向可走
{rear++;// 进入队列
sq[rear].x=i;
sq[rear].y=j;
sq[rear].pre=front;
mg[i][j]=-1;
if (i==m&&j==n)
{
printlujin(rear);
find=1;
}
}
}
front++;//取下一个搜索点
}
if (!find)
printf("\n这个迷宫没有出路(完蛋了)!\n");
}
}
void main()
{
printf("\n\t\t**************欢迎使用迷宫求解系统**************\n");
printf("\n\t游戏说明:\n");
printf("\n\t 系统将随机产生一个6行8列的<0、1矩阵迷宫图>\n");
printf("\n\t 注:0表示通路,1表示不通:\n");
printf("\n\t系统产生迷宫图数据如下:\n");
int i,j;
srand((unsigned)time(NULL));
for (i=1;i<=m;i++)//获取迷宫数据,输入0或1
for (j=1;j<=n;j++)
{
mg[i][j]= rand() % 2;
printf("%2d",mg[i][j]);
}
for(i=0;i<=m+1;i++) //添加外围
{
mg[i][0]=1;mg[i][n+1]=1;
}
for (j=0;j<=n+1;j++)
{
mg[0][j]=1;mg[m+1][j]=1;
}
printf("\n\n\t迷宫图:\n");
for (i=1;i<=m;i++)
{ printf("\n\t");
for (j=1;j<=n;j++)
printf("%4d",mg[i][j]);
printf("\n");
}
migonglujin();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -