栈的应用-迷宫问题-数据结构(C语言版)-源代码(直接运行).doc 立即下载
2024-12-04
约4.3千字
约5页
0
28KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

栈的应用-迷宫问题-数据结构(C语言版)-源代码(直接运行).doc

栈的应用-迷宫问题-数据结构(C语言版)-源代码(直接运行).doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#defineSTACK_INIT_SIZE100
#defineINCREMENT10

typedefstruct
{
intr;
intc;
}zuobiao;

typedefstruct
{
intord;//在当前坐标上的“标号”
zuobiaoseat;//坐标
intdi;//走向下一通道的方向
}lujing;

typedefstruct
{
intsz[10][10];
}Maze;

typedefstructSqStack
{
lujing*base;
lujing*top;
intsize;
}SqStack;

intinitStack(SqStack*s)
{
s->base=(lujing*)malloc(STACK_INIT_SIZE*sizeof(lujing));
if(!s->base)
return-1;
s->top=s->base;
s->size=STACK_INIT_SIZE;
return0;
}

intpush(SqStack*s,lujinge)
{
if(s->top-s->base>=s->size)
{
s->base=(lujing*)realloc(s->base,(s->size+INCREMENT)*sizeof(lujing));
if(!s->base)
return-1;
s->top=s->base+s->size;
s->size+=INCREMENT;
}

*s->top++=e;
return0;
}

intpop(SqStack*s,lujing*e)
{
if(s->top==s->base)
return-1;
*e=*(--s->top);
return0;
}

intisEmpty(SqStack*s)
{
if(s->base==s->top)
return1;
else
return0;
}

intpass(Mazemaze,zuobiaodqzb){
	if(maze.sz[dqzb.r][dqzb.c]==1)
return1;//如果当前位置是可以通过,返回1
	elsereturn0;//否则返回0
}

voidfootPrint(Maze&maze,zuobiaodqzb){
maze.sz[dqzb.r][dqzb.c]=9;
}

voidmarkPrint(Maze&maze,zuobiaodqzb){
maze.sz[dqzb.r][dqzb.c]=4;
}

zuobiaonextPos(zuobiaodqzb,intDir){
zuobiaoxzb;
switch(Dir){
case1:
xzb.r=dqzb.r;
xzb.c=dqzb.c+1;
break;
case2:
xzb.r=dqzb.r+1;
xzb.c=dqzb.c;
break;
case3:
xzb.r=dqzb.r;
xzb.c=dqzb.c-1;
break;
case4:
xzb.r=dqzb.r-1;
xzb.c=dqzb.c;
break;
}
returnxzb;
}



intmazePath(Maze&maze,zuobiaostart,zuobiaoend)
{
SqStack*s=(SqStack*)malloc(sizeof(SqStack));
initStack(s);
zuobiaodqzb=start;//设定"当前位置"为"入口位置"
lujinge;
intcurstep=1;//探索第一步
do{
if(pass(maze,dqzb)){//当前位置可通过,即是未曾走到过的通道块
footPrint(maze,dqzb);//留下足迹
e.di=1;
e.ord=curstep;
e.seat=dqzb;
push(s,e);//加入路径
if(dqzb.r==end.r&&dqzb.c==end.c)
return0;//到达终点(出口)
dqzb=nextPos(dqzb,1);//下一位置是当前位置的东邻
curstep++;//探索下一步
}else{//当前位置不能通过
if(!isEmpty(s)){
pop(s,&e);
while(e.di==4&&!isEmpty(s)){
markPrint(maze,e.seat);
pop(s,&e);//留下不能通过的标记,并退回一步
}
if(e.di<4){
e.di++;//换下一个方向探索
push(s,e);
dqzb=nextPos(e.seat,e.di);//当前位置设为新方向的相邻块
}
}
}
}
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

栈的应用-迷宫问题-数据结构(C语言版)-源代码(直接运行)

文档大小:28KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用