迷宫实验报告.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一、实验内容 3、迷宫问题。假设迷宫由m 行 n 列构成,有一个出口和一个入口,入口坐标为(1,1),出 口坐标为(m,n ),试设计并验证以下算法:找出一条从入口通往出口的路径,或报告一个“无 法通过”的信息。 (1)用C 语言实现顺序存储队列上的基本操作,然后利用该队列的基本操作找出迷宫 的一条最短路径。 (2 )设计一个二维数组MAZE[m+2][n+2]表示迷宫,数组元素为 0 表示该位置可以通 过,数组元素为 1 表示该位置不可以通行。MAZE[1][1] 、MAZE[m][n]分别为迷宫的入口和 出口。 (3 )输入迷宫的大小m 行和 n 列,动态生成二维数组;由随机数产生 0 或 1,建立迷 宫,注意 m*n 的迷宫需要进行扩展,扩展部分的元素设置为 1,相当于在迷宫周围布上一圈 不准通过的墙。 (4 )要求输出模拟迷宫的二维数组;若存在最短路径,则有出口回溯到入口(出队列 并利用栈实现),再打印从入口到出口的这条路径,例如(1,1),,(i,j ),,(m,n ); 若没有路径,则打印“No path ”。 (5 )迷宫的任一位置(i,j )上均有八个可移动的方向,用二维数组Direction 存放八个 方向的位置偏移量。 Direction[8][2]={{0,1} ,{1,1},{0,-1},{-1,-1},{1,-1},{1,0},{-1,0},{-1,1}}; (6 )为避免出现原地踏步的情况需要标志已经通过的位置,采用一个标志数组 MARK[m+2][n+2] ,初值均为0 ,在寻找路径的过程中,若通过了位置(i ,j ),则将MARK[i][j] 置为 1。 (7 )为了记录查找过程中到达位置(i ,j )及首次到达(i,j )的前一位置(i_pre,j_pre ), 需要记住前一位置(i_pre,j_pre )在队列中的序号pre ,即队列中数据元素应该是一个三元组 (i,j,pre )。 (8 )搜索过程简单下:将入口MAZE[1][1]作为第一个出发点,依次在八个方向上搜索 可通行的位置,将可通行位置(i,j,pre )入队,形成第一层新的出发点,然后依次出队,即 对第一层中各个位置分别搜索它所在八个方向上的可通行位置,形成第二层新的出发点,..., 如此进行下去,直至达到出口 MAZE[m][n]或者迷宫所有位置都搜索完毕为止。 二、实验过程及结果 一、需求分析 1、用栈的基本操作完成迷宫问题的求解,其中栈的基本操作作为一个独立的模块存在。 2 、以二维数组M[m+2][n+2]表示迷宫,M[i][j] 表示迷宫中相应(i,j )位置的通行状态(0: 表示可以通行,1:表示有墙,不可通行),完成迷宫的抽象数据类型,包括出口、入口位置 等。 3、用户从屏幕上输入迷宫,从键盘输入迷宫的大小,即迷宫的长和宽( 由于控制台大小 限制,输入的长宽需在 50 以下) ,完成对应迷宫的初始化。根据键盘输入的迷宫规格随机生 成大小相同的迷宫,产生方块的地方为墙,无方块的地方可通过,如下例所示: 如下所示: 4 、程序完成对迷宫路径的搜索,为了更好地显示出求解结果,如果存在路径,则以长 方形形式将迷宫打印出来,而不是只按步输出坐标,也便于检查路径的正确性,用特定符号 标出迷宫的物理状态,其中字符“# ”表示出口和入口,“ ”标记出可行的路径;如果程序 完成搜索后没有找到通路,则提示用户“No Path! ”。如图所示: 5、 程序执行的命令: ⑴ 创建初始化迷宫; ⑵ 搜索迷宫; ⑶ 输出搜索到的最短路径。 二、概要设计 (按照题目要求应该用队列实现路径的存储,但操作过程中遇到很多困难未能解决,故选择 栈的操作来实现路径的存储 1、迷宫的抽象数据类型定义: ADT Maze{ 数据对象:D :={aij,Start,end|-20=aij20,Start,end ∈{(i,j)|0≤i≤m+2,0 ≤j ≤n+2,m,n ≥ 0} } 数据关系:R={length ,width} length={ai-1j,aij|ai-1,aij ∈D i=1, …,m+2,j=1,…,n+2} width={aij-1,aij|aijaij-1 ∈D} 基本操作: SetMaze(M) 初始条件:M 已经定

文档评论(0)

137****0427 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档