c语言走迷宫Word格式.docx
《c语言走迷宫Word格式.docx》由会员分享,可在线阅读,更多相关《c语言走迷宫Word格式.docx(8页珍藏版)》请在冰豆网上搜索。
//创建一个存储路径的栈
voidcreatmap(int(*mazemap)[10]);
//创建迷宫图纸
voidprintmap(int(*mazemap)[10]);
voidfootprint(intx,inty,intk,int(*mazemap)[10]);
intposition(intx,inty);
//判断是否到终点
intpassroad(intx,inty,int(*mazemap)[10]);
voidfindpath(int(*mazemap)[10],sqlist*mazepath);
//在mazemap当中寻找mazepaht
voidprintpath(sqlist*mazepath);
voidroadinwords(sqlist*mazepath);
//文字叙述如何走迷宫
voidpush(intx,inty,sqlist*mazepath);
//栈操作
voidpop(sqlist*mazepath);
voidgettop(sqlist*mazepath);
voidmain()
sqlistmazepath;
creatstack(&
mazepath);
intmazemap[10][10]={
1,1,1,1,1,1,1,1,1,1,
1,0,0,1,0,0,0,1,0,1,
1,0,0,0,0,1,1,0,0,1,
1,0,1,1,1,0,0,0,0,1,
1,0,0,0,1,0,0,0,0,1,
1,0,1,0,0,0,1,0,0,1,
1,0,1,1,1,0,1,1,0,1,
1,1,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1
};
//creatmap(mazemap);
printf("
迷宫原图为:
\n"
);
printmap(mazemap);
findpath(mazemap,&
走出迷宫图纸为:
走出迷宫文字叙述为:
roadinwords(&
//printpath(&
}
voidfindpath(int(*mazemap)[10],sqlist*mazepath)
intx,y,flag=0,k=0,next;
//位置是否可通,flag=0通,1墙,2通但不可走
x=1;
y=1;
//获取初始位置
push(x,y,mazepath);
//起点位置进栈
footprint(x,y,6,mazemap);
while(flag==0&
&
k!
=162)//flag==1到达终点,0未到达终点
{
if(passroad(x,y+1,mazemap)==0)
push(x,y+1,mazepath),y=y+1,footprint(x,y,6,mazemap);
elseif(passroad(x+1,y,mazemap)==0)
push(x+1,y,mazepath),x=x+1,footprint(x,y,6,mazemap);
elseif(passroad(x,y-1,mazemap)==0)
push(x,y-1,mazepath),y=y-1,footprint(x,y,6,mazemap);
elseif(passroad(x-1,y,mazemap)==0)
push(x-1,y,mazepath),x=x-1,footprint(x,y,6,mazemap);
else
footprint(x,y,2,mazemap),pop(mazepath),gettop(mazepath),x=topelem[0],y=topelem[1];
//printmap(mazemap);
k++;
flag=position(x,y);
//判断是否到达终点
//printf("
flag==%d\n"
flag);
}
voidcreatstack(sqlist*mazepath)
mazepath->
base=(int(*)[2])malloc(120*sizeof(int(*)[2]));
top=mazepath->
base;
listlen=120;
voidpush(intx,inty,sqlist*mazepath)
**(mazepath->
top)=x;
*(*(mazepath->
top)+1)=y;
top++;
voidpop(sqlist*mazepath)
if(mazepath->
top!
=mazepath->
base)
top--;
voidprintmap(int(*mazemap)[10])
int(*p)[10];
p=mazemap;
inti,j;
\n\n\n"
for(i=0;
i<
10;
i++)
for(j=0;
j<
j++)
{
if(j==0)
printf("
"
if(*(*(p+i)+j)==0)
▇"
elseif(*(*(p+i)+j)==1)
□"
elseif(*(*(p+i)+j)==6)
★"
else
if(j==9)
}
\n\n"
voidprintpath(sqlist*mazepath)
int(*p)[2];
p=mazepath->
while(p!
top)
printf("
x=%d,y=%d\n"
**p,*(*p+1));
p++;
voidgettop(sqlist*mazepath)
int(*q)[2];
{q=p;
p++;
topelem[0]=**q;
topelem[1]=*(*q+1);
voidfootprint(intx,inty,intk,int(*mazemap)[10])
if(x<
10&
y<
10)
*(*(mazemap+x)+y)=k;
intposition(intx,inty)
intflag;
if(x==8&
y==8)
flag=1;
else
flag=0;
return(flag);
intpassroad(intx,inty,int(*mazemap)[10])
intnum=1;
num=*(*(mazemap+x)+y);
return(num);
voidroadinwords(sqlist*mazepath)
intx=1,y=1,i=0;
if(x==**p&
y+1==*(*p+1))
printf("
向右走→→"
),x=**p,y=*(*p+1);
elseif(x+1==**p&
y==*(*p+1))
向下走→→"
elseif(x==**p&
y-1==*(*p+1))
向左走→→"
elseif(x-1==**p&
向上走→→"
i++;
if(i%3==0)