数据结构课程设计报告----迷宫问题.doc_第1页
数据结构课程设计报告----迷宫问题.doc_第2页
数据结构课程设计报告----迷宫问题.doc_第3页
数据结构课程设计报告----迷宫问题.doc_第4页
数据结构课程设计报告----迷宫问题.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告课程名称: 数据结构课程设计 课程题目: 迷宫问题 数据结构课程设计题目一: 迷宫问题实验目的综合运用数组、递归等数据结构知识,掌握、提高分析、设计、实现及测试程序的综合能力。实验内容及要求以一个mn的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。(1) 根据二维数组,输出迷宫的图形。(2) 探索迷宫的四个方向:right为向右,down向下,left向左,up向上,输出从入口到出口的行走路径。测试数据左上角(1,1)为入口,右下角(8,9)为出口。001000100010001000101101011100100001000001000101011110011100010111000000实现方法可使用回溯方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。具体思路及结果 首先,事先声明好矩阵,矩阵长宽,栈顶元素,矩阵点左边等。 然后,要求用户尽享交互输入迷宫(maze)各个点处的值(1或0)保存并初始化栈顶元素,置所有方向数为下。 之后,一比较整洁大方的形式打印原迷宫供用户查看。 同时,开始本程序的重点,回溯算法,以1,2,3,4分别表示下上左右。多次使用for循环寻找可以到达出口的路径,期间分别先后试探下,左,上,右置已经走过的点为2防止死循环,寻找完后存在top栈中。 最后,打印找到的当前迷宫路径并以(坐标1)(坐标2)的形式输出路径,并且在原迷宫的基础上表示出当前找到的路径,以#代表走过的路径0代表没有障碍的地方,1代表障碍,画出迷宫路径图,并且立刻执行下一次循环,寻找下一条可通过的路径,并还原迷宫图,继续寻找路径知道找到所有解后自动退出。具体代码#include #include #define n1 5#define n2 5typedef struct nodeint x;/存x坐标int y;/存y坐标int c;/存该点可能的下点所在的方向,表示向1表示向下,2左,3向上,4向右linkstack;linkstack top25;int rows=0;int cols=0;int i,j,k,m,p,q=0;int mazen1n2;void main()for(p=0;p=n1-1;p+)for(q=0;q=n2-1;q+)printf(请输入第%d行第%d列的数n,p+1,q+1);scanf(%d,&mazepq);/初始化top,置所有方向为下for(i=0;in1 * n2;i+)topi.c=1;printf(the maze is:n);/打印原迷宫for(i=0;in1;i+)for(j=0;jn2;j+)printf(mazeij?1 :0 );printf(n);i=0;topi.x=0;topi.y=0;maze00=2;/回溯算法doif(topi.c5) /还可以向前试探if(topi.x=4&topi.y=4) /已找到一个组合 /打印路径printf(the way %d is:n,m+);for(j=0;j,topj.x,topj.y);printf(n);/打印选出路径的迷宫for(j=0;jn1;j+)for(k=0;kn2;k+)if(mazejk=0)printf(0 );else if(mazejk=2) printf(# );else printf(1 );printf(n);mazetopi.xtopi.y=0;topi.c=1;i-;topi.c+=1;continue;switch(topi.c) /向前试探case 1:if(mazetopi.xtopi.y+1=0)/下i+;topi.x=topi-1.x;topi.y=topi-1.y+1;mazetopi.xtopi.y=2;elsetopi.c+=1;break;case 2:if(mazetopi-1.x-1topi.y=0)/左i+;topi.x=topi-1.x-1;topi.y=topi-1.y;mazetopi.xtopi.y=2;elsetopi.c+=1;break;case 3:if(mazetopi.xtopi.y-1=0)/上i+;topi.x=topi-1.x;topi.y=topi-1.y-1;mazetopi.xtopi.y=2;elsetopi.c+=1;break;case 4:if(mazetopi.x+1topi.y=0)/右i+;topi.x=topi-1.x+1;topi.y=topi-1.y;mazetopi.xtopi.y=2;e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论