写了一个迷宫的代码,还没有测试,你们看看有没有错误。有没有改的地方。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
intx,y,mg[22][22]; inthang,lie;
intstx,sty,edx,edy;
voidreadyMG(inta[22][22])
{
for(hang=0;hang<=11;hang++)
{
for(lie=0;lie<=11;lie++)
{
mg[lie][hang]=1;
}
}
}
voiddrawMG(inta[22][22])
{
printf("");
for(hang=0;hang<=x+1;hang++)
{
printf("%2d",hang);
}printf("\n");
for(lie=0;lie<=y+1;lie++)
{
printf("%3d",lie);
for(hang=0;hang<=x+1;hang++)
{
if(a[lie][hang]==-1)printf("");
if(a[lie][hang]==0)printf("");
if(a[lie][hang]==1)printf("■");
if(a[lie][hang]==2)printf("·");
}
printf("\n");
}
}
voidcheckright(inta[22][22])
{
for(hang=1;hang<=y;hang++)
{
for(lie=1;lie<=x;lie++)
{
for(;(mg[lie][hang]!=1)&&(mg[lie][hang]!=0);)
{
printf("坐标(%d,%d)的数据错误,请重新输入:\n",lie,hang);
scanf("%d",&mg[lie][hang]);
}
}
}
system("CLS");
printf("迷宫数据检查完毕,迷宫数据输入正确,系统自动生成迷宫,并以图形显示。\n");
}
typedefstructqnode
{
intdata[400];
structqnode*next;
}QNode;
typedefstruct
{
QNode*front;
QNode*rear;
}LiQueue;
voidInitQueue(LiQueue*&q)
{
q=(LiQueue*)malloc(sizeof(LiQueue));
q->front=q->rear=NULL;
}
voidClearQueue(LiQueue*&q)
{
QNode*p=q->front,*r;
if(p!=NULL)
{
r=p->next;
while(r!=NULL)
{
free(p);
p=r;
r=p->next;
}
}
free(q);
}
intQueueEmpty(LiQueue*q)
{
if(q->rear==NULL)
return1;
else
return0;
}
struct
{
inti,j;
intpre;
}Qu[100];
intfront=-1,rear=-1;
voidprint(intfront)
{
intk=front,j,ns=0;
printf("\n");
do
{
j=k;
k=Qu[k].pre;
Qu[j].pre=-1;
}while(k!=0);
printf("系统已搜索到最佳路径:\n");
k=0;
while(k<100)
{
if(Qu[k].pre==-1)
{
ns++;
printf("\t(%d,%d)-",Qu[k].j,Qu[k].i);
mg[(Qu[k].i)][(Qu[k].j)]=2;
if(ns%5==0)printf("\n");
}
k++;
}
printf("完毕\n");
}
intmgpath(intxi,intyi,intxe,intye)
{
inti,j,find=0,di;
rear++;
Qu[rear].i=xi;Qu[rear].j=yi;
Qu[rear].pre=-1;
mg[1][1]=-1;
while(front<=rear&&!find)
{
front++;
i=Qu[front].i;j=Qu[front].j;
if(i==xe&&j==ye)
{
find=1;
print(front);
return(1);
}
for(di=0;di<4;di++)
{
switch(di)
{
case0:i=Qu[front].i-1;j=Qu[front].j;break;
case1:i=Qu[front].i;j=Qu[front].j+1;break;
case2:i=Qu[front].i+1;j=Qu[front].j;break;
case3:i=Qu[front].i;j=Qu[front].j-1;break;
}
if(mg[i][j]==0)
{
rear++;
Qu[rear].i=i;Qu[rear].j=j;
Qu[rear].pre=front;
mg[i][j]=-1;
}
}
}
return(0);
}
voiddstart(inta[22][22])
{
scanf("%d,%d",&stx,&sty);
if(stx>x||sty>y)
{
printf("该坐标点不在迷宫内,请重新输入:\n");
dstart(a);
}
else
{
if(a[sty][stx]==1)
{
printf("该坐标点为墙壁,不能作为起点,请重新输入:\n");
dstart(a);
}
}
}
voiddend(inta[22][22])
{
scanf("%d,%d",&edx,&edy);
if(edx>x||edy>y)
{
printf("该坐标点不在迷宫内,请重新输入:\n");
dend(a);
}
else
{
if(a[edy][edx]==1)
{
printf("该坐标点为墙壁,不能作为终点,请重新输入:\n");
dend(a);
}
}
}
voidmain()
{
readyMG(mg);
printf("输入迷宫的大小。(格式:x,y,x和y为[2,20]的正整数)\n");
scanf("%d,%d",&x,&y);
for(;(x<2)&&(y<2)&(x>20)&&(y>20);)
{
printf("迷宫大小不符合规定,请重新输入:\n");
scanf("%d,%d",&x,&y);
}
printf("输入数据:(1表示墙壁,0表示通路,用空格或回车连接)\n");
for(hang=1;hang<=y;hang++)
{
printf("输入迷宫第%d行数据:\n",hang);
for(lie=1;lie<=x;lie++)
{
scanf("%d",&mg[hang][lie]);
for(;(mg[hang][lie]!=1)&&(mg[hang][lie]!=0);)
{
printf("坐标(%d,%d)的数据错误,请重新输入:\n",lie,hang);
scanf("%d",&mg[hang][lie]);
}
}
}
checkright(mg);
drawMG(mg);
printf("输入起点坐标:(格式:x,y)\n");
dstart(mg);
printf("输入终点坐标:(格式:x,y)\n");
dend(mg);
mgpath(sty,stx,edy,edx);
printf("系统自动生成图形路径:\n");
drawMG(mg);
}
龙铭洪
写了一个迷宫的代码,还没有测试,你们看看有没有错误。有没有改的地方。
相关推荐
迷宫C++代码 迷宫C++代码 迷宫C++代码 迷宫C++代码 迷宫C++代码 迷宫C++代码
简单迷宫代码
超强的vb迷宫代码,不错的学习vb资料
迷宫求解MFC代码
完整迷宫代码,适合初学者学习交流,大家一起学习进步吧。
C51迷宫小车代码,dfs遍历迷宫,bfs搜索最短路径冲刺
javascript版迷宫代码,html网页形式,下载即可运行。 代码风格简练、结构清晰,总193行代码,核心是迷宫算法的实现。
C# 迷宫代码,有兴趣可以参考一下,C# 迷宫代码,有兴趣可以参考一下
这是一个用C语言编写的迷宫的源代码,有兴趣的可以参考一下
数据结构上机作业,C语言,迷宫源代码,编译通过可运行
以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对信任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
c++走迷宫源代码
首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以 三元组(i,j,d)的形式输出,其中(i,j)指示迷宫中的一个位置(行号和列号),d 表示走到下一 位置的方向(对于迷宫中...
C语言迷宫程序代码 具有自动生成迷宫、自动输出路径的功能
此程序是课程设计的源代码,用于数据结构课程设计的源代码,为迷宫代码
迷宫算法的代码实现,可以帮助部分c++初学者解决相应问题,联系:oZayliuxianzhang@163
c++代码实现迷宫的算法,利用栈操作
用c++实现一个小的老鼠迷宫的小游戏,包含头文件和实现源代码,用vc6.0可以实现。
C#死崽走迷宫代码,很好玩的游戏,也有很好的学习价值
带选路优化的迷宫算法。在选路过程中做了部分优化,对优化算法函数扩张可以达到选最短路径。