- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构 迷宫问题求解
学号
实验日期 2017.6.20 教师签字 成绩
实验报告
【实验名称】 迷宫问题的求解
【实验目的】
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
(3)用递归和非递归两种方式完成迷宫问题的求解。
【实验原理】
迷宫问题通常是用“穷举求解”方法解决,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前走;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。栈是一个后进先出的结构,可以用来保存从入口到当前位置的路径。
【实验内容】
1 需求分析
(1)首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出。其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。如,对于教材第50页图3.4所示的迷宫,输出一条通路为:(1,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2),…
(2)编写递归形式的算法,求得迷宫中所有可能的通路。
(3)以方阵形式输出迷宫及其通路。
(4)按照题意要求独立进行设计,设计结束后按要求写出设计报告。
2.输入输出的要求:
(i) 求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一个坐标的方向。
(ii)输出迷宫示意图
3.程序所能达到的功能:
(i) 实现一个以链表作存储结构的栈类型,以非递归算法求出通路
(ii)以一个递归算法,对任意输入的迷宫矩阵求出所有通路。
2 概要设计
②手动生成迷宫,即为二维数组maze[M][N]赋值
③构建一个栈用于存储迷宫路径
④建立迷宫节点用于存储迷宫中每个节点的访问情况;
非递归
本程序包含6个函数:
(1)主函数 main()
(2)生成迷宫 create_maze()
(4)打印迷宫 print_maze()
(5)搜索迷宫路径并用三元组输出路径 mgpath()
(6)用图来输出路径print_tu();?
递归
本程序包含3个函数:
(1)主函数main();
(2)打印迷宫printmaze();
(3)搜索迷宫路径pass(int x,int y);
3. 详细设计
1.非递归
起点和终点的结构类型 typedef struct{
int h;
int l;
}T;
栈节点类型 typedef struct cell{
int row;
int col;
int dir;
}TCell;
?1.生成迷宫
void creat_maze(int a,int b)
{定义i,j为循环变量
for(ia)
for(jb)
输入maze[i][j]的值
}
2.打印迷宫
void print_maze(int m,int n)
{
用i,j循环变量,将maze[i][j]输出
}
3.搜索迷宫路径
void mazepath(int maze[][],T s,T e) //参数传递迷宫和起点与终点
{
TCell S[N1*N2];
top=0; //建立栈
S[top].row=s.h;
S[top].col=s.l;
S[top].dir=-1; //起点入栈
while(top=0) //判栈是否空
{ i,j为当前访问点的位置
if(i,j是终点坐标)
用循环输出栈里的元素;
else 将(i,j),即访问点入栈,然后向四周寻找是否有通路,若有通路,将原访问点标记(赋值-1),选一条通路作为新访问点,入栈。
若没有通路,回溯,将栈顶元素出栈作为访问点,继续寻找通路。
}
4.生成路线图
Print_tu()
{
i,j为循环变量
for(ia)
for(jb)
{
if(maze[i][j]==1);
print(“#”) // # 表示墙
else if(maze[i][j]==0)
print(“ ”)
else print(“+”) // + 表示路径
}
2.递归
void printmaze()
{
用i,j循环变量,将ma
您可能关注的文档
- 改稿:复习课讲座.ppt
- 改版市场趋势.ppt
- 支气管哮喘.柳霞.pptx
- 政史地教学反思汇编.doc
- 放大器在信号处理中的应用(科创).ppt
- 操作指南模板.docx
- 撒哈拉以南的非洲(09高二)4.ppt
- 政治必修一第五课新时代的劳动者.ppt
- 政治:1.8.1《国家财政》(新人教版必修一).ppt
- 教你简单的香蕉减肥法.pptx
- 小学数学 人教版教学课件 4年级上册 角的度量.pptx
- 小学数学-人教版教学课件-5年级上册-小数除法-除数是整数的小数除法.pptx
- 小学数学 人教版教学课件 5年级上册 小数除法 一个数除以小数.pptx
- 小学数学 人教版教学课件 5年级上册 可能性 可能性的大小.pptx
- 实验八-验证动量守恒定律.pdf
- 高二政治周测(4)参考答案与解析.docx
- 高二政治周测(4)原创版.docx
- 第十三单元-工业革命时期:工业革命、马克思主义的诞生和世界殖民体系的形成.pdf
- 河南省郑州市第十九高级中学2024-2025学年高一下学期周测政治试题.docx
- 第十五单元-第二次世界大战后:20世纪下半叶世界的新变化与当代世界的大发展.pdf
文档评论(0)