迷宫图解8.doc_第1页
迷宫图解8.doc_第2页
迷宫图解8.doc_第3页
迷宫图解8.doc_第4页
迷宫图解8.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

课程设计说明书课程名称:数据结构课程设计(A)课程编号:L1100801课程名称:线性表的应用迷宫图解 姓 名: 尹冬山 班 级: 信息与计算科学1002班 学 号: 1011122045 指导教师: 殷 超 实现功能:从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,显然需要用一个后进先出的结构来保存从入口到当前位置的路径。因此,在求迷宫通路的算法中要应用“栈”的思想假设“当前位置”指的是“在搜索过程中的某一时刻所在图中某个方块位置”,则求迷宫中一条路径的算法的基本思想是:若当前位置“可通”,则纳入“当前路径”,并继续朝“下一位置”探索,即切换“下一位置”为“当前位置”,如此重复直至到达出口;若当前位置“不可通”,则应顺着“来向”退回到“前一通道块”,然后朝着除“来向”之外的其他方向继续探索;若该通道块的四周4个方块均“不可通”,则应从“当前路径”上删除该通道块。所谓“下一位置”指的是当前位置四周4个方向(上、下、左、右)上相邻的方块。假设以栈记录“当前路径”,则栈顶中存放的是“当前路径上最后一个通道块”。由此,“纳入路径”的操作即为“当前位置入栈”;“从当前路径上删除前一通道块”的操作即为“出栈”。语 言: 数据结构(c语言版) 严蔚敏 清华大学出版社 数据结构(C语言篇)习题与解析 李春保 清华大 C语言与数据结构 王立柱 清华大学出版社主要算法:#include#includetypedef struct nodeint x;int y;int c;linkstack;int maze2020;linkstack top20*20;int i,j,k,m=1,run;void search(int g,int h) int a,b; for(a=0;ag;a+) for(b=0;bh;b+) mazeab=rand()%3;if(mazeab=1)mazeab=1;else mazeab=0; for(a=0;ag;a+)mazea-10=1;maze0a-1=1;mazeah-1=1;mazeg-1a=1;maze10=mazeg-2h-1=0;maze11=mazeg-2h-2=0;void funk(int g,int h)int a,b; printf(生成的迷宫是:n); for(a=0;ag;a+) for(b=0;bh;b+) printf(mazeab?: ); printf(n); void main() int g,h,v; int w;printf(n);printf(n);printf( 迷宫求解请按:1 n); printf( 退出请按:2 n); printf(n);printf(n); scanf(%d,&w);switch(w) case 1:printf(输入迷宫的行和列:); scanf(%d,&g); printf(大小创建完毕!n); h=g; search(g,h); for(i=0;i=g*h;i+) topi.c=1; funk(g,h); i=0; topi.x=1; topi.y=0; maze10=2; run=1; v=1; do if(topi.c5) if(topi.x=(g-2)&topi.y=(h-1) printf(第%d条通路是:n,m+); for(j=0;j); printf(n); for(j=0;jg;j+) for(k=0;kh;k+) if(mazejk=0) printf( ); else if(mazejk=2) printf( *); else printf(); printf(n); mazetopi.xtopi.y=0; topi.c=1; i-; topi.c+=1; continue; switch(topi.c) case 0: run=0;if(v=1) printf(此迷宫无通路!); break; case 1: if(mazetopi.xtopi.y+1=0) i+; topi.x=topi-1.x; topi.y=topi-1.y+1; mazetopi.xtopi.y=2; if(mazeg-2h-1=2) v=0; else topi.c+=1; break; case 2: if(mazetopi.x-1topi.y=0) i+; topi.x=topi-1.x-1; topi.y=topi-1.y; mazetopi.xtopi.y=2; else topi.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; else topi.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; else topi.c+=1; break; else if(i=0) return; mazetopi.xtopi.y=0; topi.c=1; i-; topi.c+=1; while(run=1); break;case 2: printf(*)谢谢(*)!) ; break; default: break;运行界面:实例:第一步:确定迷宫求解第二步:输入实际值得运行结果部分主要源代码:void search(int g,int h) /迷宫的建立过程,利用rand函数,输入相应的行数 int a,b; 和列数,自动生成相应的迷宫 for(a=0;ag;a+) for(b=0;bh;b+) mazeab=!(rand()%9); void funk(int g,int h) /迷宫的生成过程int a,b; printf(生成的迷宫是:n); for(a=0;ag;a+) for(b=0;bh;b+) printf(mazeab?: ); /确定迷宫的通路和墙; printf(n); do if(topi.c5) /判断迷宫是否有通路的过程 if(topi.x=(g-2)&topi.y=(h-1) printf(第%d条通路是

温馨提示

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

评论

0/150

提交评论