ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:57.74KB ,
资源ID:5024530      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5024530.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(云南大学软件学院数据结构实验报告四.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

云南大学软件学院数据结构实验报告四.docx

1、云南大学软件学院数据结构实验报告四 (本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助) 实验难度: A B C 序号学号姓名成绩12指导教师 (签名)学期:2012秋季学期 任课教师: 实验题目: 迷 宫 小 组 长: 云南大学软件学院2010学年 秋季 学期数据结构实验成绩考核表学号: 姓名: 本人承担角色: 学号: 姓名: 本人承担角色: 评分项目评分指标分值得分实验构思(10%)1. 实验目的明确52. 实验内容理解透彻、对实验所涉及到的知识点分析到位5实验设计(15%)1. 有对基本数据结构的抽象数据类型定义52. 实验方案设计完整,数据结构、算法选择合理

2、 53.算法结构和程序功能模块之间逻辑清晰、有相应的流程图5实验实现(25%)1. 代码编写规范、风格统一、注释清楚易读 52. 程序运行正常,测试结果正确153. 界面友好、易于操作、有较强的容错性5实验报告撰写(10%)1. 内容详实无缺漏,文字流畅、图表清楚52. 实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考5个人工作量(30%)1. 个人完成工作量152. 个人技术水平103. 团队合作精神5实验运作(10%)1. 有一定用户群52. 应用前景分析5综合得分: (满分100分)指导教师: (注:此表在难度为C时使用,每个成员一份。)(下面的内容由

3、学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。难度A满分70分,难度B满分90分)一、【实验构思(Conceive)】(10%)1.创建四个文件,stack.h头文件、queue.h头文件、maze.h头文件和main.cpp主文件2.栈文件用于在移动玩家位置过程中,将移动的方向保存到栈中。然后在修改玩家位置时,用出栈的元素判断前方是地图的哪边。然后将这个元素保存到队列中,等玩家走出迷宫后,输出走过的路径。3.maze头文件:(1)迷宫(二位数组)中的元素数据类型为自己构造的maze类型。里面有二位数组的位置y(行),x(列)、有s

4、ubstance为char类型、有left、right、up、down四个方位,表示二位数组中的绝对坐标关系。(2)maze * JudgeRight(maze * player,maze * playerF)这个函数是用于传入玩家当前位置和前方位置,来返回右手边的地址。(3)maze * JudgeFront(maze * player,char &go)这个函数利用玩家的当前位置,和刚刚直走以后的方向,来返回前方的地址。(4)maze * GoToFront(maze * player,maze * playerF,struct stack &S)这个函数是传入玩家的当前位置,前方位置,然

5、后修改当前位置的地址,并返回。其中还要把移动的方向压入栈中。5.主文件里面创建10X10的二维数组来表示迷宫,并且初始化迷宫中的元素,确立其绝对坐标,确立绝对的邻居关系。接下来利用迷宫口诀:“伸出右手,摸着墙顺着走”,即“如果右手边不是墙,则,右转后直走;如果右手边是墙,前方没墙,则直走;右手边是墙,前方有墙,则左转”,做一个循环,如果玩家到了u才结束。其中有入栈,出栈,入队的操作。迷宫走出来以后,利用岀队函数输出玩家走过的路径。二、【实验设计(Design)】(20%)1.可以直接利用实验三(魔王语言)中的栈和队列头文件。栈文件用于在maze.h头文件中的一个函数:maze * GoToFr

6、ont(maze * &player,maze * &playerF,struct stack &S)这个函数是在移动玩家位置过程中,将移动的方向保存到栈中。然后在修改玩家的前方位置时,用出栈的元素判断前方是地图的哪边。然后将这个元素保存到队列中,等玩家走出迷宫后,输出走过的路径。2.maze头文件:(1)迷宫(二位数组)中的元素数据类型为自己构造的maze类型。里面有二位数组的位置y(行),x(列),这样表示的方便是能直观利用坐标。元素中还有substance为char类型,其中有w表示墙、e表示空、p表示玩家、u表示出口。还有left、right、up、down四个方位,表示二位数组中的绝

7、对坐标关系。(5)maze * JudgeRight(maze * player,maze * playerF)函数:在里面定义一个maze型指针playerR,然后判断:如果前方就坐标的下方,那么playerR是坐标中的左方;如果前方就坐标的上方,那么playerR是坐标中的右方;如果前方就坐标的左方,那么playerR是坐标中的上方;如果前方就坐标的右方,那么playerR是坐标中的下方。然后返回playerR。(6)maze * JudgeFront(maze * player,char &go)函数:在里面定义一个maze型指针playerF,传入go(表示刚刚直走的方向),如果上走,

8、palyerF修改成player的上方;如果下走,palyerF修改成player的下方;如果左走,palyerF修改成player的左方;如果右走,palyerF修改成player的右方;返回palyerF。(7)maze * GoToFront(maze * player,maze * playerF,struct stack &S)直走函数:根据前方的坐标减去玩家当前坐标,然后得出x,y的值。如果x为1,向右走;x为-1,向左走;y为1,向下走;y为-1,向上走;然后将所走的方向用char表示成U,D,L,R压住栈中。将玩家的前方赋值给变化后的位置,返回变化后的玩家位置。3.主文件里面创

9、建10X10的二维数组来表示迷宫,并且初始化迷宫中的元素,确立其绝对坐标,确立绝对的邻居关系。首先是定义二维数组:maze mazeArr1010(非指针类型);初始化:(1)访问二维数组的每一个元素,确立它的绝对坐标(x,y)、其中如果遇到边缘(x = 0 | y = 0 | x = 9 | y = 9)时,将其中表示成墙,否则先表示成空。(2)大量坐标中的元素初始化后,再局部修改,将部分空的地方变成墙。将(1,1)表示成玩家的初始化位置p,(8,8)表示成出口u。(3)之后就是定义二位数组的绝对上下左右关系。特别注意的是如果是二位数组的边缘,那么要注意将边缘中某些方向指针修改成指向NULL

10、的情况。比如:当x为0时,表示的是二维数组的第一列,那么将第一列所有元素的左指针都指向NULL,然后再修改其右,上,下指针。如果x,y都不为0,那么表示的是迷宫的内部(非边缘)。那么,按照坐标关系,下指针指向(y+1,x)的地址;上指针指向(y-1,x)的地址;右指针指向(y,x+1)的地址;左指针指向(y,x-1)的地址;(4)接下来利用迷宫口诀:“伸出右手,摸着墙顺着走”,即“如果右手边不是墙,则,右转后直走;如果右手边是墙,前方没墙,则直走;右手边是墙,前方有墙,则左转”,做一个循环,如果玩家到了u才结束。其中有入栈,出栈,入队的操作。其中,左转就是3次右转;直走之前将player的su

11、bstance修改为空,再传直走函数,之后再判断前飞,再来判断右方,然后入队。而在每次大循环开始前,将玩家的当前位置中的substance修改成p。(5)迷宫走出来以后,利用岀队函数输出玩家走过的路径。三、【实现描述(Implement)】(30%)1.二位数组中每个元素的数据结构:typedef struct mazeS char substance; int x,y; mazeS *left,*right,*up,*down;maze;2.判断玩家的右手边地址函数:maze * JudgeRight(maze * player,maze * playerF) maze * playerR;

12、 if(playerF = player-down) playerR = player-left; if(playerF = player-up) playerR = player-right; if(playerF = player-left) playerR = player-up; if(playerF = player-right) playerR = player-down; return playerR;3.判断前方maze * JudgeFront(maze * player,char &go) maze * playerF; if(go = U) playerF = playe

13、r-up; if(go = D) playerF = player-down; if(go = L) playerF = player-left; if(go = R) playerF = player-right; return playerF;4.直走函数:maze * GoToFront(maze * &player,maze * &playerF,struct stack &S) char go; int y,x; y = playerF-y - player-y; x = playerF-x - player-x; if(y = -1) go = U; if(y = 1) go =

14、D; if(x = -1) go = L; if(x = 1) go = R; PushStack(S,go); player = playerF; return player;5.走迷宫的实现:char go;struct linkQueue Q;InitQueue(Q);struct stack S;InitStack(S); maze * player = &mazeArr11;maze * playerF = player-right; maze * playerR = JudgeRight(player,playerF);/开始走迷宫,并做记录while(1) if(player-s

15、ubstance = u)break; else player-substance = p; if(playerR-substance = w) if(playerF-substance = w) /左转=右转3次 for(int i = 0; i substance = e; player = GoToFront(player,playerF,S); PopStack(S,go); playerF = JudgeFront(player,go); playerR = JudgeRight(player,playerF); EnQueue(Q,go); 五、【测试结果(Testing)】(10

16、%)实验测试结果均为正确:测试的输入测试结果截图按照课本中的地图修改(3,5)变为墙(6,3)变成空六、【实验总结】(10%)总结:这次的实验遇到了三个问题:一是在修改二位数组的4方向指针的时候,遇到程序崩溃问题,原因是那些指针指向了错误的地址。然后修改了一下迷宫边缘那些块的4个方向地址,运行才正确。二是认识了一点,在maze.h文件中已经包含了stack.h,然后main.cpp文件中包含maze.h以后,就不用在main.cpp文件中预读stack.h文件了,不然会导致很多编译错误,其实就是一处错误。三是通过传递函数,来修改指针指向的地址,目前还没找到方法。只有通过引用来修改其指向的值,而

17、不能修改地址值。七、【项目运作描述(Operate)】(10%)本次试验,可以做进一步改进,就是在输出玩家所走过的路径后,进行dos下的游戏。玩家输出方向键后,判断方向。修改二维数组中的相应值就可以了。利用刷屏技术,实现娱乐的性质。八、【代码】(10%)Stack.h和Queue.h头文件代码不再给出,下面是maze.h和mian.cpp文件的代码:#include stack.h#include stdlib.h#include stdio.h/定义迷宫二位数组中的数据类型结构typedef struct mazeS char substance; int x,y; mazeS *left,

18、*right,*up,*down;maze;/判断玩家的右手边地址maze * JudgeRight(maze * player,maze * playerF) maze * playerR; if(playerF = player-down) playerR = player-left; if(playerF = player-up) playerR = player-right; if(playerF = player-left) playerR = player-up; if(playerF = player-right) playerR = player-down; return pl

19、ayerR;/判断玩家的右手边地址maze * JudgeFront(maze * player,char &go) maze * playerF; if(go = U) playerF = player-up; if(go = D) playerF = player-down; if(go = L) playerF = player-left; if(go = R) playerF = player-right; return playerF;/直走函数maze * GoToFront(maze * &player,maze * &playerF,struct stack &S) char

20、go; int y,x; y = playerF-y - player-y; x = playerF-x - player-x; if(y = -1) go = U; if(y = 1) go = D; if(x = -1) go = L; if(x = 1) go = R; PushStack(S,go); player = playerF; return player;第二个文件:queue.h主文件代码如下:#include#include queue.h#include maze.h#include #include stdio.husing namespace std;void ma

21、in() maze mazeArr1010; /* * 数组的初始化 * */ /定义坐标(x,y)并初始化边缘为墙,将内部赋值成空气 for(int i = 0; i 10; i+) for(int j = 0; j 10; j+) if(i = 0 | i = 9 | j = 0 | j = 9) mazeArrij.substance = w; else mazeArrij.substance = e; mazeArrij.x = j; mazeArrij.y = i; /修改内部某些为墙 mazeArr13.substance = w; mazeArr17.substance = w;

22、 mazeArr23.substance = w; mazeArr27.substance = w; mazeArr35.substance = w; mazeArr36.substance = w; /实验结果二的修改地图 mazeArr36.substance = e; mazeArr53.substance = w; mazeArr42.substance = w; mazeArr43.substance = w; mazeArr44.substance = w; mazeArr54.substance = w; mazeArr62.substance = w; mazeArr66.su

23、bstance = w; mazeArr72.substance = w; mazeArr73.substance = w; mazeArr74.substance = w; mazeArr76.substance = w; mazeArr77.substance = w; mazeArr81.substance = w; /定义其他标记 mazeArr11.substance = p; mazeArr88.substance = u; /定义数组中方向的关系 for(int y = 0; y 10; y+) for(int x = 0; x 0 & y 0 & y 0 & x 0 & x 9

24、) mazeArryx.left = &mazeArryx-1; mazeArryx.right = &mazeArryx+1; /*for(int y = 1; y = 8; y+) for(int x = 0; x 8; x+) coutsubstance ; coutright; maze * playerR = JudgeRight(player,playerF); /开始走迷宫,并做记录 while(1) if(player-substance = u)break; else player-substance = p; if(playerR-substance = w) if(playerF-substance = w) /左转=右转3

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1