数据结构实验二迷宫递归.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档