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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

《数据结构》上机实验报告迷宫求解.docx

1、数据结构上机实验报告迷宫求解(说明:实验报告必须包含下面的每项内容,根据实验情况认真填写,封面必须打印或复印(A4纸),书写上机实验报告内容的纸张也用A4纸,最后从侧面装订)一【上机实验目的】1. 了解栈的应用2. 编写迷宫程序二【实验环境】PC机每人1台三【上机实验内容】(此次上机实验老师布置的具体任务)迷宫求解主要利用栈实现,要求能动态生成迷宫,显示有几条路径,用图形界面显示最合适的路径。四【上机调试程序流程图】(注:可打印)(用传统流程图的形式表示)五【上机调试中出现的错误信息、错误原因及解决办法】(记录下你调试程序中出现的错误信息的英文提示,分析出错原因及可能的解决办法)1. 马虎造成

2、的错误 2. 程序的逻辑有问题3. 语法用错调试过程中,将整个程序分为一个个子块,逐个解决六【上机调试后的源程序及还存在的问题】(注:源程序可打印)(同时记录下你对你编写此程序的其它具体想法,)#include#include#include#includeusing namespace std;#define OVERFLOW 0#define OK 1#define ERROE 0#define TRUE 1#define FALSE 0#define SIZE 102/迷宫的最大范围typedef int Status;typedef struct int x; int y;PosTyp

3、e;/坐标位置typedef struct PosType seat; /通道块在迷宫中的坐标位置 int di; /从上一通道块走向此通道块的方向SElemType;Status Check(char &choice);/确认输入正确void Random(int mgSIZESIZE,int size,PosType start,PosType end) int i,j,k; srand(time(NULL); for(j=0;jsize;j+) mg0j=mgsize-1j=1; /设置迷宫外围不可走,保证只有一个出口和入口 for(i=1;isize-1;i+) mgi0=mgisiz

4、e-1=1; for(i=1;isize-1;i+) for(j=1;jsize-1;j+) k=rand()%4; /随机生成0、1、2、3四个数 if(k) mgij=0; else mgij=1; /else mgstart.ystart.x=0; mgend.yend.x=0; /将入口、出口设置为0即可通过Status Pass(PosType e,int mgSIZESIZE) if (mge.ye.x=0) /0时可以通过 return OK; / 如果当前位置是可以通过,返回1 return OVERFLOW; / 其它情况返回0Status FootPrint(PosType

5、 e,int mgSIZESIZE) mge.ye.x=7; return OK;PosType NextPos(PosType e,int dir) PosType E; switch(dir) case 1:E.x=e.x+1; /向右 E.y=e.y; break; case 2:E.x=e.x; /向下 E.y=e.y+1; break; case 3:E.x=e.x-1; /向左 E.y=e.y; break; case 4:E.x=e.x; /向上 E.y=e.y-1; break; return E;Status Equal(PosType e1,PosType e2) if(e

6、1.x=e2.x)&(e1.y=e2.y) return TRUE; return FALSE;Status MarkPath(PosType e,int mgSIZESIZE,int di) switch(di) case 1:/向右 mge.ye.x=11; break; case 2:/向下 mge.ye.x=12; break; case 3:/向左 mge.ye.x=13; break; case 4:/向上 mge.ye.x=14; break; return OK;PosType FrontPos(PosType e,int dir) PosType E; switch(dir)

7、 case 1:E.x=e.x-1; /向左 E.y=e.y; break; case 2:E.x=e.x; /向上 E.y=e.y-1; break; case 3:E.x=e.x+1; /向右 E.y=e.y; break; case 4:E.x=e.x; /向下 E.y=e.y+1; break; return E;Status PathPrint(stack s,int mgSIZESIZE) SElemType e,front,tail; int di; e=s.top(); tail=e; s.pop(); MarkPath(e.seat,mg,1); while(!s.empty

8、() front=s.top(); s.pop(); if(Equal(front.seat,FrontPos(e.seat,e.di) di=e.di; e=front; MarkPath(e.seat,mg,di); return OK;Status PathClean(int mgSIZESIZE,stack s) SElemType e; while(!s.empty() e=s.top(); s.pop(); mge.seat.ye.seat.x=0; return OK;Status MazePath(PosType start,PosType end,int mgSIZESIZE

9、,stack &s) queue q; SElemType e; int di=0; e.di=di; e.seat=start;/ 设定当前位置为入口位置 q.push(e); s.push(e); do e=q.front();/得到队首的值 q.pop();/重复使用时,用这个初始化 for(di=1;di=4;di+) e.seat=NextPos(e.seat,di); e.di=di; if(Pass(e.seat,mg) q.push(e); s.push(e); FootPrint(e.seat,mg); if(Equal(e.seat,end) PathPrint(s,mg)

10、; return TRUE; e.seat=FrontPos(e.seat,di); while(!q.empty(); printf(nn囧 ! 不能到达终点!); return FALSE;void PrintMaze(int mgSIZESIZE,int size) int i,j; printf(n); for(i=0;isize;i+) for(j=0;jsize;j+) switch(mgij) case 0: case 7: printf( ); break; case 1: if(1=i&0=j)|(size-2)=i&(size-1)=j) printf( ); else p

11、rintf(); break; case 11: printf(); break; case 12: printf(); break; case 13: printf(); break; case 14: printf(); break; printf(n); printf(n);Status Check(char &choice) while(!(choice=getchar()=y)|(choice=n)|(choice=Y)|(choice=N)/非正确输入 if(choice!=n) printf(请输入确定选择(y/n)n); getchar(); getchar();/跳过n re

12、turn OK; int main() stack s; int mgSIZESIZE=1,size; PosType start,end; char choice; system(mode con cols=200 lines=200); printf(n=迷宫最短路径游戏=); printf(n说明:不能走的区域); printf(n 空格代表可通过的区域); printf(n默认起点为左上角位置,默认终点为右下角位置n); printf(n=n); printf(请输入迷宫边长(3%d),系统将为你产生一个随机迷宫:,SIZE-2); scanf(%d,&size); while(siz

13、eSIZE-2)|(sizeSIZE-2)|(sizesize-2)|start.xsize-2)|(start.ysize-2)|end.xsize-2)|(end.y1)|!Pass(end,mg)|Equal(start,end) if(!Pass(end,mg) printf(些位置不能为“终点”!n); else if(Equal(start,end) printf(该位置已为起点!n); else printf(输入有误!n); printf(请输入“终点”坐标(1%d)用空格分隔:,size-2); scanf(%d %d,&end.x,&end.y); getchar();/跳

14、过n MazePath(start,end,mg,s); PrintMaze(mg,size); printf(退出游戏请输入Q否则继续游戏!n); choice=getchar();getchar();/跳过n printf(n=程序退出,感谢使用!=n); return 0;七【上机实验中的其他它问题及心得】(在上机实验中遇到的你不能解决的其它问题,简单描述一下你此次上机的收获及感想)迷宫问题关键是探索路径和方法,即在探索过程中记录走过的路径,能走通则继续走;如某一位置的下一位置走不通,则要沿原路退回,这点尤其重要。我们需要一个后进先出结构来保存从入口到当前位置的路径,所以对“栈”的应用必

15、不可少。其次,对迷宫的表示方法也很重要,迷宫中每一点用二维数组坐标表示,当前位置四周的四个方向的点的坐标变化也要清楚。每走一步都要时时检测,对于此问题应掌握其方法和思想,不仅在迷宫问题,在其他很多问题中也能有所应用。对今后其他问题的研究会有很大帮助。在实际的上机操作过程中,不仅是让我们了解数据结构的理论知识,更重要的是培养解决实际问题的能力,所以相信通过此次项目可以提高我们分析设计能力和编程能力,为后续课程的学习及实践打下良好的基础。只有当你真正自己一步步的去编写每一行代码时,你才会有所收获。编写程序时,要做好前期规划。同时非常感谢同学和朋友们对我的热心帮助以及我们的李莉丽老师对我的细心指导。

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

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