- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构实验二迷宫递归
数据结构实验报告
实验名称: 实验二——栈与队列
学生姓名: 大学霸
班 级: xxxxxxxxxx
班内序号: 19
学 号: xxxxxxxxxx
日 期: 2012年11月17日
1.实验要求
a. 实验目的
通过选择下面五个题目之一进行实现,掌握如下内容:
进一步掌握指针、模板类、异常处理的使用
掌握栈的操作的实现方法
掌握队列的操作的实现方法
学习使用栈解决实际问题的能力
学习使用队列解决实际问题的能力
b. 实验内容
利用栈结构实现迷宫求解问题。迷宫求解问题如下:
心理学家把一只老鼠从一个无顶盖的大盒子的入口赶进迷宫,迷宫中设置很多隔壁,对前进方向形成了多处障碍,心理学家在迷宫的唯一出口放置了一块奶酪,吸引老鼠在迷宫中寻找通路以到达出口,测试算法的迷宫如下图所示。
2. 程序分析
本程序的功能是用递归的方法找到所有走出迷宫的路径,并将路径输出,同时在这些路径中找出最优解。
首先,读取后台预定的迷宫TXT地图(实际上是10×10的数字矩阵,0代表空地,3代表墙,可以很直观地修改),把数据赋给arr二维数组,内容不发生改变。
然后,将这个迷宫地图输出,判断迷宫是否有完整通路,如果能走出便进行下一步,如果不能,提示错误
迷宫有完整通路,可使用回溯的方法,即从入口出发,顺着某一个方向进行探索,若能走通,则此步进栈,继续往前进;否则沿着原路返回,换另一个方向探索,直至出口位置,求得一条通路……重复上述步骤,找出所有可能的路径,统计每一步
在程序的最后,将每一种路径的长度进行比较,找出最短的一个或多个路径
2.1 存储结构
定义结点的结构体
struct Point
{
int X;
int Y;
};
进行前进后退等操作时即是对X、Y值的改变,同时也代表二维数组元素的行数、列数
迷宫图的数据用二维数组来存储,用0表示空地可以前进,用3表示墙走不通
arr 1 arr 2 …… …… arr n-1 arr n
当执行寻找路径时,从一个节点到下一个结点系统会自动调用栈
2.2 关键算法分析
关键算法
1.找出迷宫走法
回溯法,利用递归穷举可能解
每走一步:
[1] 如果当前位置=出口,把完整路径输出,结束
[2] 否则:
[2.1] 假设当前位置为路径;
[2.2] 如果东面未走过:向东走一步
[2.3] 如果南面未走过:向南走一步
[2.4] 如果西面未走过:向西走一步
[2.5] 如果北面未走过:向北走一步
[3] 设置当前位置走不通,回溯,并将此位置标记
2.读取迷宫图
[1] 进行循环体
[1.1] 输入要读取的迷宫图maze
[1.2] 如果存在 跳出循环,下一环节
[1.3 ]如果不存在 显示错误
输入的迷宫图有误,重新上面的步骤
[2] 定义文件流对象fin
[3] 根据maze选择打开不同的迷宫图TXT文件,建立关联
[4] 判断文件是否能打开
[4.1] 如果能打开,逐行提取数字,赋给二维数组arr,关闭文件
[4.2] 如果不能打开,提示错误
3.打印还未走过的迷宫图
[1] 从第一行到第十行循环
[2] 从第一列到第十列循环
[2.1] 此节点如果为墙,打印“■”
[2.2]其他为空地,打印空格
4.判断是否能走通
[1] 从最后一行倒序循环
[1.1] 如果找到不是墙的元素,返回能走通
[2]从最后一列倒序循环
[2.1] 如果找到不是墙的元素,返回能走通
[3] 返回不能走通
5.打印走通后的迷宫图
[1] 将路径计数器k置0
[2] 从第一行到第十行循环
[2.1] 从第一列到第十列循环
[2.1.1] 此节点如果为墙,打印“■”
[2.1.2] 此节点如果为路径,打印“*”,k加1
[2.1.3] 此节点如果未走过,打印空格
[3] 将k存到向量PathLength(专门比较路径长度)
打印一共走了k步
6.找出最优解
[1] 定义最短路径数组ShortestPath
假设最短路径长度ShortestLength为向量PathLength的第一个元素值
[2] 在向量PathLength里进行循环
[2.1] 如果PathLength里某个元素值小于最短路径长度ShortestLength
[2.2] 将最小路径长度ShortestLength等于这个元素值
[3] 在向量PathLength里进行循环
[3.1] 如果PathLength里某个元素值等于最短路径长度ShortestLeng
您可能关注的文档
- 成品POM各项指标概念.doc
- 成本领先战略范例.doc
- 成都地铁一期工程区间隧道施工选择加泥式土压早衡盾构机施工.doc
- 成都市高标准农田建设工作方案.doc
- 成都理工大学地球物理学基础复习资料.doc
- 成都市2014届高三摸底测试物理试题及答案.doc
- 成都理工大学资源勘查工程本科论文之外文译文.doc
- 成都砂卵石地层注浆加固技术应用.doc
- 我今天教教大家练车的方法吧.doc
- 我们的节日-端午活动方案记载总结等资料.doc
- 2023年教师资格之中学教育学教育心理学练习题.docx
- 2023年教师资格之中学教育学教育心理学练习题附答案.docx
- 2023年教师资格之中学教育学教育心理学练习题和答案.docx
- 2023年教师资格之中学教育学教育心理学练习题附答案详解.docx
- 2023年教师资格之中学教育学教育心理学练习题附带答案.docx
- 2023年教师资格之中学教育学教育心理学练习题包括详细解答.docx
- 2023年教师资格之中学教育学教育心理学练习题库包含答案.docx
- 2023年教师资格之中学教育学教育心理学练习题库提供答案解析.docx
- 2023年教师资格之中学教育学教育心理学练习题库附有答案详解.docx
- 2023年教师资格之中学教育学教育心理学模拟题库和答案.docx
文档评论(0)