没有合适的资源?快使用搜索试试~ 我知道了~
首页迷宫C语言 课程设计报告
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/1723067/bg1.jpg)
迷宫实验报告
课程名称: 数据结构 实验名称: 实验四 队列的应用
班 级: xxxx 学生姓名: xxx 学号: xxx
指导教师评定: xx 签 名: XXX
题目二:求解迷宫的一条最短路径,要求:用栈和队列实现,不允许使用递归算法。问题描述见教
材第 50 页“3.2.4”迷宫求解。
一、需求分析
⒈ 用栈的基本操作完成迷宫问题的求解,其中栈的基本操作作为一个独立的模块存在。
⒉ 以二维数组 M[m+2][n+2]表示迷宫,M[i][j] 表示迷宫中相应(i,j)位置的通行状态(0:表示可
以通行,1:表示有墙,不可通行),完成迷宫的抽象数据类型,包括出口、入口位置等。
⒊ 用户从屏幕上输入迷宫,完成对应迷宫的初始化。
⒋ 迷宫的入口位置和出口位置在合法范围内由用户而定。
⒌ 程序完成对迷宫路径的搜索,如果存在路径,则以长方形形式将迷宫打印出来,用特定符号标出迷
宫的物理状态,其中字符“□”表示不可行,“■”表示出口和入口,空格表示没有经过的部分,“◆”标
记出可行的路径;如果程序完成搜索后没有找到通路,则提示用户“can’t nd one way!”。
⒍ 程序执行的命令:
⑴ 创建初始化迷宫;
⑵ 搜索迷宫;
⑶ 输出搜索结果。
二、概要设计
⒈ 设计栈的抽象数据类型定义:
ADT Stack {
数据对象:D={a
i
:|a
i
∈PositionSet,i=1…n,n≥0}
数据关系:R1={<a
i-1
,a
i
>|a
i-1
,a
i
∈d,i=2,…n}
基本操作: 操作结果
InitStack(&S) 构造一个空栈,完成栈的初始化 S
DestoryStack(&S) 撤消一个已经存在的栈 S
ClearStack(&S) 将栈 S 重新置空
StackLength(S) 返回栈的长度
GetTop(S,&e) 用 e 返回栈 S 的栈顶元素
StackEmpty(S) 若 S 为空返回 1,否则返回 0
Push(&S,e) 将新的元素 e 压入栈顶
Pop(&S,e) 删除栈顶元素,并用 e 返回其值
StackTraverse(s) 将栈 S 的所有元素输出
}ADT Stack;
⒉ 迷宫的抽象数据类型定义:
ADT Maze{
数据对象:D:={a
ij
,Start,end|a
ij,
Start,end∈{} 0≤i≤m+2,0≤j≤n+2,m,n≥0}
数据关系:R={ROW.COL}
Row={<a
i-1j
,a
ij
>|a
i-1
,a
ij
∈D i=1,…,m+2,j=1,…,n+2}
1
![](https://csdnimg.cn/release/download_crawler_static/1723067/bg2.jpg)
Col={<a
ij-1
,a
ij
>|a
ij
a
ij-1
∈D}
基本操作:
SetMaze(&Maze)
初始条件:Maze 已经定义,Maze 的下属单元二维数组 Maze.M[row+2]
[d+2]已存在,Maze.start,Maze.end 也已作为下属存储单元存在
操作结果:构成数据迷宫,用数值标识迷宫的物理状态,以 0 表示通路,以 1
表示障碍,由终端读取迷宫空间大小,各点处的具体物理状态及
Start 和 End 点位置,完成迷宫构建
Pass(&Mazem,&Nposition,Position,di)
初始条件:已知目前迷宫状态及当前位置、下一步探索方向 di
操作结果:完成相应的搜索任务,如果可行,则用 Nposition 返回 下一步位置,
并将 Maze 状态改变为相应点已走过情况
PrintMaze(Maze)
操作结果:输出字符标示的迷宫
FindWay(Maze,&way)
操作结果:利用 Pass 搜索迷宫,用 way 返回搜索所得路径。如不存在,返回
0
PrintWay(Maze,way)
操作结果:将 Maze 及相应最短路径一起打印输出
}ADT MAZE,
⒊ 本程序模块结构
⑴ 主函数模块
void main(){
初始化;
do{
接受命令;
处理命令;
}while(退出命令)
}
⑵ 栈模块——实现栈抽象数据类型;
⑶ 迷宫模块——实现迷宫抽象数据类型;
各模块之间的调用关系如下:
主程序模块
迷宫模块
栈模块
三、详细设计
⒈ 基本数据类型操作
⑴ 栈模块
① typedef struct{
int x,y,num; // X、Y 坐标位置,NUM 栈的追踪序号
}Postype;
② typedef struct{
2
![](https://csdnimg.cn/release/download_crawler_static/1723067/bg3.jpg)
SelemType *base; // 在栈初始化之前和销毁之后为 NULL
SelemType *top; // 栈顶指针,在栈顶元素上方一单元处
int stacksize; // 当前已分配存储空间,以元素为单位
} sqstack; // 线性存储结构
③ 参数设置:
#dene STACK_INIT_SIZE 20;
#dene STACKINIREMENT 10;
//----------基本操作的算法描述--------------------
Status InitStack(SqStack &s){ // 构造一个空栈
S.base=(SelemType )malloc(STACK_INIT_SIZE*SizeOf(SelemType));
if(!S.base)exit(OVERLOW); // 存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return ok;
}
Staus DestoryStack(Sqstack &s){// 销毁栈 S
Free(S.base);
S.top=S.base; S.stacksize=o;
return ok;
}
Status ClearStack(sqstack &S){ // 清空 S
S.top=S.base;return ok;
}
Status StackEmpty(Sqstack S){ // 若 S 为空返回 TRUE,否则返回 FALSE
return S.base==S.top;
}
int stackLength(Sqstack S) // 返回栈 S 的长度,以单元为单位
return S.top-S.base;
}
Status GetTop(SqStack S,Selemtype &e){
// 栈不空,用 e 返回 s 的 栈 顶元素及 OK ,否则返回
ERROR
if(S.top==S.base)return ERROR;
e=*(S.top-1);
return ok;
}
Status Push(Sqstack &S,SelemType e){ // 插入元素 e 为新的栈顶元素
if(S.top-S.base>=S.stacksize){// 栈满追加存储空间
S.base=(SelemType)realloc(S.base,
3
剩余11页未读,继续阅读
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/0a3c503d8d094470bb8fbf3216e383dc_wy2732324.jpg!1)
wy2732324
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- 利用迪杰斯特拉算法的全国交通咨询系统设计与实现
- 全国交通咨询系统C++实现源码解析
- DFT与FFT应用:信号频谱分析实验
- MATLAB图论算法实现:最小费用最大流
- MATLAB常用命令完全指南
- 共创智慧灯杆数据运营公司——抢占5G市场
- 中山农情统计分析系统项目实施与管理策略
- XX省中小学智慧校园建设实施方案
- 中山农情统计分析系统项目实施方案
- MATLAB函数详解:从Text到Size的实用指南
- 考虑速度与加速度限制的工业机器人轨迹规划与实时补偿算法
- Matlab进行统计回归分析:从单因素到双因素方差分析
- 智慧灯杆数据运营公司策划书:抢占5G市场,打造智慧城市新载体
- Photoshop基础与色彩知识:信息时代的PS认证考试全攻略
- Photoshop技能测试:核心概念与操作
- Photoshop试题与答案详解
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)