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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

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

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

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

3、类型、有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)这个函数是传入玩家的当前位置,前方位置,然后修改当前位置的地址,并返

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

5、layer,maze * &playerF,struct stack &S)这个函数是在移动玩家位置过程中,将移动的方向保存到栈中。然后在修改玩家的前方位置时,用出栈的元素判断前方是地图的哪边。2.maze头文件:里面有二位数组的位置y(行),x(列),这样表示的方便是能直观利用坐标。元素中还有substance为char类型,其中有w表示墙、e表示空、p表示玩家、表示出口。还有left、right、up、down四个方位,表示二位数组中的绝对坐标关系。(5)maze * JudgeRight(maze * player,maze * playerF)函数:在里面定义一个maze型指针play

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

7、lyerF修改成player的右方;返回palyerF。(7)maze * GoToFront(maze * player,maze * playerF,struct stack &直走函数:根据前方的坐标减去玩家当前坐标,然后得出x,y的值。如果x为1,向右走;x为-1,向左走;y为1,向下走;y为-1,向上走;然后将所走的方向用char表示成U,DLR压住栈中。将玩家的前方赋值给变化后的位置,返回变化后的玩家位置。3.主文件里面创建10X10的二维数组来表示迷宫,并且初始化迷宫中的元素,确立其绝对坐标,确立绝对的邻居关系。首先是定义二维数组:maze mazeArr1010(非指针类型);

8、初始化:(1)访问二维数组的每一个元素,确立它的绝对坐标(x,y)、其中如果遇到边缘(x = 0 | y = 0 | x = 9 | y = 9)时,将其中表示成墙,否则先表示成空。(2)大量坐标中的元素初始化后,再局部修改,将部分空的地方变成墙。将(1,1)表示成玩家的初始化位置,(8,8)表示成出口。(3)之后就是定义二位数组的绝对上下左右关系。特别注意的是如果是二位数组的边缘,那么要注意将边缘中某些方向指针修改成指向NULL的情况。比如:当x为0时,表示的是二维数组的第一列,那么将第一列所有元素的左指针都指向NULL,然后再修改其右,上,下指针。如果x,y都不为0,那么表示的是迷宫的内部

9、(非边缘)。那么,按照坐标关系,下指针指向(y+1,x)的地址;上指针指向(y-1,x)的地址;右指针指向(y,x+1)的地址;左指针指向(y,x-1)的地址;(4)接下来利用迷宫口诀:其中,左转就是3次右转;直走之前将player的substance修改为空,再传直走函数,之后再判断前飞,再来判断右方,然后入队。而在每次大循环开始前,将玩家的当前位置中的substance修改成(5)迷宫走出来以后,利用岀队函数输出玩家走过的路径。三、【实现描述(Implement)】(30%)1.二位数组中每个元素的数据结构:typedef struct mazeS char substance; int

10、x,y; mazeS *left,*right,*up,*down;maze;2.判断玩家的右手边地址函数:maze * JudgeRight(maze * player,maze * playerF) maze * playerR; if(playerF = player-down) playerR = player-left;up)right;left)up;right)down; return playerR;3.判断前方maze * JudgeFront(maze * player,char &go) maze * playerF; if(go = playerF = player-

11、return playerF;4.直走函数:S) char go; int y,x; y = playerF-y - player-y; x = playerF-x - player-x; if(y = -1) go = ; if(y = 1) if(x = -1) if(x = 1) PushStack(S,go); player = playerF; return player;5.走迷宫的实现:char go;struct linkQueue Q;InitQueue(Q);struct stack S;InitStack(S); maze * player = &mazeArr11;ma

12、ze * playerF = player- maze * playerR = JudgeRight(player,playerF);/开始走迷宫,并做记录while(1) if(player-substance = )break; else player-substance = if(playerR-) if(playerF- /左转=右转3次 for(int i = 0; i 3; i+) playerF = playerR; playerR = JudgeRight(player,playerF); continue; else playerF = playerR; playerR =

13、JudgeRight(player,playerF); /直走 player = GoToFront(player,playerF,S); PopStack(S,go); playerF = JudgeFront(player,go); playerR = JudgeRight(player,playerF); EnQueue(Q,go); 五、【测试结果(Testing)】实验测试结果均为正确:测试的输入测试结果截图按照课本中的地图修改(3,5)变为墙(6,3)变成空六、【实验总结】总结:这次的实验遇到了三个问题:一是在修改二位数组的4方向指针的时候,遇到程序崩溃问题,原因是那些指针指向了错

14、误的地址。然后修改了一下迷宫边缘那些块的4个方向地址,运行才正确。二是认识了一点,在maze.h文件中已经包含了stack.h,然后main.cpp文件中包含maze.h以后,就不用在main.cpp文件中预读stack.h文件了,不然会导致很多编译错误,其实就是一处错误。三是通过传递函数,来修改指针指向的地址,目前还没找到方法。只有通过引用来修改其指向的值,而不能修改地址值。七、【项目运作描述(Operate)】本次试验,可以做进一步改进,就是在输出玩家所走过的路径后,进行dos下的游戏。玩家输出方向键后,判断方向。修改二维数组中的相应值就可以了。利用刷屏技术,实现娱乐的性质。八、【代码】S

15、tack.h和Queue.h头文件代码不再给出,下面是maze.h和mian.cpp文件的代码:#include stack.hstdlib.hstdio.h/定义迷宫二位数组中的数据类型结构/判断玩家的右手边地址/直走函数第二个文件:queue.h主文件代码如下:#includequeue.hmaze.h#include using namespace std;void main() maze mazeArr1010; /* * 数组的初始化 * */ /定义坐标(x,y)并初始化边缘为墙,将内部赋值成空气 for(int i = 0; 10; for(int j = 0; j j+) if

16、(i = 0 | i = 9 | j = 0 | j = 9) mazeArrij.substance = else mazeArrij.substance = mazeArrij.x = j; mazeArrij.y = i; /修改内部某些为墙 mazeArr13.substance = mazeArr17.substance = mazeArr23.substance = mazeArr27.substance = mazeArr35.substance = mazeArr36.substance = /实验结果二的修改地图 mazeArr53.substance = mazeArr42

17、.substance = mazeArr43.substance = mazeArr44.substance = mazeArr54.substance = mazeArr62.substance = mazeArr66.substance = mazeArr72.substance = mazeArr73.substance = mazeArr74.substance = mazeArr76.substance = mazeArr77.substance = mazeArr81.substance = /定义其他标记 mazeArr11.substance = mazeArr88.subst

18、ance = /定义数组中方向的关系 for(int y = 0; y y+) for(int x = 0; x 0 & 9) mazeArryx.up = & mazeArryx.down = & else if(x = 9) mazeArryx.right = NULL; else if(y = 0) mazeArryx.up = NULL; if(x mazeArryx.left = & mazeArryx.right = & else if(y = 9) mazeArryx.down = NULL; /*for(int y = 1;= 8; 8; coutsubstance cout /开始走迷宫,并做记录 while(1) if(player- else player- if(playerR- if(playerF- /左转=右转3

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

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