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

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
目 录 一、课程设计题目 3 二、问题描述 3 三、基本要求 3 四、设计思想 3 4.1 函数的功能和参数 3 4.2存储结构的选择 4 4.3迷宫有解无解情况的解读 5 五、漫步迷宫源程序 5 六、运行结果 10 6.1 主界面 10 6.2 手动生成迷宫 10 6.3 自动生成迷宫 13 七、设计过程出现的问题和优点 14 八、设计的心得体会 17 《数据结构》课程设计-------漫步迷宫 课程设计题目:漫步迷宫 问题描述: 用m行n列的m*n个正方格表示一个迷宫,其中划有斜线的方格表示不可通行,未划有斜线的方格表示通行。请编写寻找从入口到出口的一条最短路径的程序。 基本要求: 迷宫的规则(即行数和列数),状态设置(即各方格能否通行的状态),以及入口和出口的位置,均应由输入随机确定。 求得的最短路径,应该以从入口到出口的路径上的各个方格的坐标的线性序列输出。当无通路是,应该报告无路径的信息。 尽量采用结构化程序设计方法,要求对各个模块的功能及参数做必要的说明。 设计思想 函数的功能和参数 函数参数 函数作用 point Row,col,predecessor row,col,predecessor 分别代表当前位置的行坐标和列坐标,列坐标和移动到下一步的方向 creat_maze m,n 手动输入迷宫,其中m,n分别为行列的值 present_maze m,n 自动生成迷宫,其中m,n分别为行列的值 present_in m,n,a,b 自动生成迷宫的入口,m,n,a,b分别为迷宫的行数、列数、入口的坐标 present_out m,n,c,d 自动生成迷宫的出口,m,n,c,d分别为迷宫的行数、列数、出口的坐标 print_maze m,n,a,b,c,d 显示生成的迷宫的图形,m,n,a,b,c,d分别为迷宫的行数和列数、入口坐标和出口坐标 result_maze m,n 显示最后的迷宫最短路径的路线,m,n分别为路径的各个点的行列数坐标 enqueue p 为队列函数,实现迷宫的各个点的存储 visit row,col 将迷宫当前位置的前后左右四个方向上联通但没有走过的点的值改为2,row,col分别代表当前位置的行坐标和列坐标 mazepath m,n,a,b,c,d 实现对迷宫的最短路径的回溯,m,n,a,b,c,d分别为迷宫的行数和列数、入口坐标和出口坐标 存储结构的选择 在这个编写的迷宫程序中,我采用的是队列,而没有采用栈这种数据结构。队列将迷宫的每个点都用顺序存储的方式将它存储起来,便于在需找路径是广度优先搜索。 首先是将迷宫的各个点的是否通路用0和1表示出来,形成数组,存入到maze这个数组中。当指定一个入口时,首先判断该点是否为通路,若不为通路则直接输出“此迷宫无解”,然后再判断所处位置的前后左右的四个方向上的连通性和是否为出口,连通则记在队列中,若为出口,则停止入队列。在要寻找迷宫路径时,从出口开始回溯查找,将在出口到入口这条路径上的点的值记为3,便于输出迷宫路径。 在这个程序中我们要寻找的是迷宫的最短路径,所以要用广度优先搜索,在用广度优先搜索时,每个点都会观察它的前后左右的连通性,每走一步便记录一下,最后走出迷宫的路径便一定是最短的。 编写此段程序所用语言为C语言。 4.3迷宫的有解和无解的情况解读: 在这个迷宫中会出现无解的情况,特别是在自动生成迷宫的时候,甚至还有自动生成迷宫的入口和出口,在自动生成时,给点的赋值为0或1,每个点连通的情况时一半一半的,这样的概率也就导致了它的无解。无解也就说明了出口和入口不在一个连通分量上。 漫步迷宫源程序 #include"stdlib.h" #include"stdio.h" #define N 50 #define M 50 int X; int maze[N][M]; struct point{ int row,col,predecessor; }queue[512]; int head=0,tail=0; void creat_maze(int m,int n){ int i,j; printf("\n\n"); printf("请按行输入迷宫,0表示通路,1表示障碍:\n\n"); for(i=0;i<m;i++) for(j=0;j<n;j++) { printf("maze[%d][%d]:",i,j); scanf("%d",&maze[i][j]); } } void present_maze(int m,int n){ int i,j; printf("\n迷宫自动生成中……\n\n"); system("pause"); for(i=0;i<m;i++) f

文档评论(0)

damei + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档