C++编写的迷宫文档格式.docx
《C++编写的迷宫文档格式.docx》由会员分享,可在线阅读,更多相关《C++编写的迷宫文档格式.docx(5页珍藏版)》请在冰豆网上搜索。
{structelementelem;
structLStack*next;
}*PLstack;
voidinitstack(PLstack&
S)
{S=NULL;
}
intstackempty(PLstackS)
{if(S==NULL)
return1;
else
return0;
voidpush(PLstack&
S,elemente)
{PLstackp;
p=(PLstack)malloc(sizeof(LStack));
p->
elem=e;
next=S;
S=p;
intpop(PLstack&
S,structelemente)
if(!
stackment(S))
{e=S->
elem;
p=S;
S=S->
next;
free(p);
eles
voidcreatemigong(int&
maze[M][N])
{inti,j;
intm,n;
printf("
开始创建迷宫\n输入0表示可通\n输入1表示障碍\n"
);
for(i=1;
i<
=m;
i++)
for(j=1;
j<
=n;
j++)
scanf("
%d"
&
maze[i][j]);
for(i=0;
=m+1;
{maze[i][0]=1;
maze[i][n+1]=1;
for(j=0;
=n+1;
{maze[0][j]=1;
maze[m+1][j]=1;
你所创建的迷宫是:
\n"
{for(j=0;
j+=)
%2d"
maze[i][j]);
voidmazepath(structmarkstart,structmarkend,intmaze[M][N],intdir[4][2])
{inti,j,d,a,b;
structelementelem,e;
PLstackS1,S2;
initstack(S1);
initstack(S2);
maze[start.x][start.y]=2;
elem.x=start.x;
elem.y=start.y;
elem.d=-1;
push(S1,elem);
while(!
stackempty(S1))
{pop(S1,elem);
i=elem.x;
j=elem.y;
d=elem.d+1;
while(d<
4)
{a=i+dir[d][0];
b=j+dir[d][1];
if(a==end.x&
&
b==end.y&
maze[a][b]==0)
{elem.x=i;
elem.y=j;
elem.d=d;
elem.x=a;
elem.y=b;
elem.d=886;
while(S1)
{pop(S1,e);
push(S2,e;
}
while(S2)
{pop(S2,e);
printf("
-->
(%d,%d)"
e.x,e.y);
if(maze[a][b]==0)
{maze[a][b]=2;
elem.x=i;
i=a;
j=b;
d=-1;
d++;
prinyf("
没有找到可以走出迷宫的路径\n"
main()
{intsto[M][N];
structmarkstart,end;
intadd[4][2]={{1,0},{0,-1},{-1,0},{0,1}};
createmigong(sto);
请输入入口的横坐标,纵坐标,用逗号隔开\n"
%d,%d"
start.x,&
start.y);
请输入出口的横坐标,纵坐标,用逗号隔开\n"
mazepath(start,end,sto,add);
getch();