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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

算法与数据结构课程设计漫步迷宫.docx

1、算法与数据结构课程设计漫步迷宫目 录一、课程设计题目 3二、问题描述 3三、基本要求 3四、设计思想 34.1 函数的功能和参数 34.2存储结构的选择 44.3迷宫有解无解情况的解读 5五、漫步迷宫源程序 5六、运行结果 106.1 主界面 106.2 手动生成迷宫 106.3 自动生成迷宫 13七、设计过程出现的问题和优点 14八、设计的心得体会 17数据结构课程设计-漫步迷宫一、 课程设计题目:漫步迷宫二、 问题描述:用m行n列的m*n个正方格表示一个迷宫,其中划有斜线的方格表示不可通行,未划有斜线的方格表示通行。请编写寻找从入口到出口的一条最短路径的程序。三、 基本要求:1、 迷宫的规

2、则(即行数和列数),状态设置(即各方格能否通行的状态),以及入口和出口的位置,均应由输入随机确定。2、 求得的最短路径,应该以从入口到出口的路径上的各个方格的坐标的线性序列输出。当无通路是,应该报告无路径的信息。3、 尽量采用结构化程序设计方法,要求对各个模块的功能及参数做必要的说明。四、 设计思想4.1 函数的功能和参数 函数参数函数作用pointRow,col,predecessorrow,col,predecessor 分别代表当前位置的行坐标和列坐标,列坐标和移动到下一步的方向creat_mazem,n手动输入迷宫,其中m,n分别为行列的值present_mazem,n自动生成迷宫,其

3、中m,n分别为行列的值present_inm,n,a,b自动生成迷宫的入口,m,n,a,b分别为迷宫的行数、列数、入口的坐标present_outm,n,c,d自动生成迷宫的出口,m,n,c,d分别为迷宫的行数、列数、出口的坐标print_mazem,n,a,b,c,d显示生成的迷宫的图形,m,n,a,b,c,d分别为迷宫的行数和列数、入口坐标和出口坐标result_mazem,n显示最后的迷宫最短路径的路线,m,n分别为路径的各个点的行列数坐标enqueuep为队列函数,实现迷宫的各个点的存储visitrow,col将迷宫当前位置的前后左右四个方向上联通但没有走过的点的值改为2,row,co

4、l分别代表当前位置的行坐标和列坐标mazepathm,n,a,b,c,d实现对迷宫的最短路径的回溯,m,n,a,b,c,d分别为迷宫的行数和列数、入口坐标和出口坐标4.2 存储结构的选择在这个编写的迷宫程序中,我采用的是队列,而没有采用栈这种数据结构。队列将迷宫的每个点都用顺序存储的方式将它存储起来,便于在需找路径是广度优先搜索。首先是将迷宫的各个点的是否通路用0和1表示出来,形成数组,存入到maze这个数组中。当指定一个入口时,首先判断该点是否为通路,若不为通路则直接输出“此迷宫无解”,然后再判断所处位置的前后左右的四个方向上的连通性和是否为出口,连通则记在队列中,若为出口,则停止入队列。在

5、要寻找迷宫路径时,从出口开始回溯查找,将在出口到入口这条路径上的点的值记为3,便于输出迷宫路径。在这个程序中我们要寻找的是迷宫的最短路径,所以要用广度优先搜索,在用广度优先搜索时,每个点都会观察它的前后左右的连通性,每走一步便记录一下,最后走出迷宫的路径便一定是最短的。编写此段程序所用语言为C语言。4.3迷宫的有解和无解的情况解读: 在这个迷宫中会出现无解的情况,特别是在自动生成迷宫的时候,甚至还有自动生成迷宫的入口和出口,在自动生成时,给点的赋值为0或1,每个点连通的情况时一半一半的,这样的概率也就导致了它的无解。无解也就说明了出口和入口不在一个连通分量上。五、 漫步迷宫源程序#includ

6、estdlib.h#includestdio.h#define N 50#define M 50int X;int mazeNM;struct point int row,col,predecessor;queue512;int head=0,tail=0;void creat_maze(int m,int n) int i,j; printf(nn); printf(请按行输入迷宫,0表示通路,1表示障碍:nn); for(i=0;im;i+) for(j=0;jn;j+) printf(maze%d%d:,i,j); scanf(%d,&mazeij); void present_maze

7、(int m,int n) int i,j; printf(n迷宫自动生成中nn); system(pause); for(i=0;im;i+) for(j=0;jn;j+) mazeij=rand()%2;void present_in(int m,int n,int &a,int &b) printf(n迷宫入口自动生成中nn); system(pause); a=rand()%m; b=rand()%n;void present_out(int m,int n,int &c,int &d) printf(n迷宫出口自动生成中nn); system(pause); c=rand()%m;

8、d=rand()%n;void print_maze(int m,int n,int a,int b,int c,int d) int i,j; printf(n迷宫生成结果如下:nn); /printf(迷宫入口n); /printf(); for(i=0;im;i+) printf(n); for(j=0;jn;j+) if(mazeij=0) printf(); if(mazeij=1) printf(); /printf(迷宫出口n);void result_maze(int m,int n) int i,j; printf(迷宫通路(用& 表示)如下所示:nt); for(i=0;i

9、m;i+) printf(n); for(j=0;jn;j+) if(mazeij=0|mazeij=2) printf(); if(mazeij=1) printf(); if(mazeij=3) printf(& ); void enqueue(struct point p) queuetail=p; tail+;struct point dequeue() head+; return queuehead-1;int is_empty() return head=tail;void visit(int row,int col,int maze5050) struct point visit

10、_point=row,col,head-1; mazerowcol=2; enqueue(visit_point);int mazepath(int maze5050,int m,int n,int a ,int b,int c,int d) X=1; struct point p=a,b,-1; if(mazep.rowp.col=1)printf(n*n);printf(此迷宫无解nn);X=0;return 0; mazep.rowp.col=2; enqueue(p); while(!is_empty() p=dequeue(); if(p.row=c)&(p.col=d) break

11、; if(p.row+1m)&(mazep.row+1p.col=0) visit(p.row+1,p.col,maze); if(p.col+1=0)&(mazep.rowp.col-1=0) visit(p.row,p.col-1,maze); if(p.row-1=0)&(mazep.row-1p.col=0) visit(p.row-1,p.col,maze); if(p.row=c&p.col=d) printf(n*n); printf(迷宫路径为:n); printf(%d,%d)n,p.row,p.col); mazep.rowp.col=3; while(p.predeces

12、sor!=-1) p=queuep.predecessor; printf(%d,%d)n,p.row,p.col); mazep.rowp.col=3; else printf(n*n); printf(此迷宫无解!nn);X=0; return 0;void main()int i,m,n,a,b,c,d,j,cycle=0;while(cycle!=(-1)printf(*n);printf( 2011-2012学年第二学期数据结构课程设计 n);printf( -漫步迷宫 n);printf( 开发员:曾祥柯 n);printf( 班 级:10计算本1班 n);printf( 学 号:1015023129 n);printf( 欢迎进入漫步迷宫 n);printf(*n);printf( 手动生成迷宫 请按:1n);printf( 自动生成迷宫 请按:2n);printf( 退出漫步迷宫 请按:3nn);printf(*n);printf(n);printf(请选择你的操作:n);scanf(%d,&i);switch(i) case 1:prin

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

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