




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、需求分析本课程设计是解决迷宫求解的问题,从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,显然需要用一个后进先出的结构来保存从入口到当前位置的路径。因此,在求迷宫通路的算法中要应用“栈”的思想假设“当前位置”指的是“在搜索过程中的某一时刻所在图中某个方块位置”,则求迷宫中一条路径的算法的基本思想是:若当前位置“可通”,则纳入“当前路径”,并继续朝“下一位置”探索,即切换“下一位置”为“当前位置”,如此重复直至到达出口;若当前位置“不可通”,则应顺着“来向”退回到“前一通道块”,然后朝着除“来向”之外的其他方向继续探索;若该通道块的四周4个方块均“不可通”,则应从“当前路径”上删除该通道块。所谓“下一位置”指的是当前位置四周4个方向(东、南、西、北)上相邻的方块。假设以栈S记录“当前路径”,则栈顶中存放的是“当前路径上最后一个通道块”。由此,“纳入路径”的操作即为“当前位置入栈”;“从当前路径上删除前一通道块”的操作即为“出栈”。二、数据结构1. 数据结构设计考虑1) 建立一个二维数组表示迷宫的路径(0表示通道,1表示墙壁);2) 创建一个栈,用来存储“当前路径”,即“在搜索过程中某一时刻所在图中某个方块位置”。2. 逻辑结构存储结构1) 创建一个Int类型的二维数组int mazen1n2,用来存放0和1 ;2) 创建一个结构体用来储存数组信息(数组的横坐标X,数组的纵坐标Y,方向C) typedef struct node int x; int y; int c; linkstack;3) 创造一个栈包括(top表示栈顶元素) linkstack topn1*n2;三、算法设计首先,创建数组的大小,此数组大小要求用户自己输入。具体算法: printf(输入迷宫大小(提示:行列数不能超过50!):); scanf(%d,&g); printf(大小创建完毕,请输入迷宫:n);其次,用户自己定义迷宫的内容,算法: void shuzu(int g,int h) int a,b; for(a=0;ag;a+) for(b=0;bh;b+) scanf(%d,&mazeab); 第三,产生迷宫,算法: void scsu(int g,int h) int a,b; printf(生成的迷宫是:n); for(a=0;ag;a+) for(b=0;bh;b+) printf(mazeab?#: ); printf(n); 最后,迷宫寻路找到出口,其算法见源代码。根据这些算法设计,我们设计出了迷宫求解的应用。四、源代码#include#include#define n1 50#define n2 50typedef struct nodeint x;int y;int c;linkstack;int mazen1n2;linkstack topn1*n2;int i,j,k,m=1,run; void shuzu(int g,int h) int a,b; for(a=0;ag;a+) for(b=0;bh;b+) scanf(%d,&mazeab);void scsu(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(* 欢迎使用迷宫求解 *n);printf(*n);printf(*n);printf(n);printf(*n);printf(*n);printf(*迷宫求解请按:1 *n); printf(* 退出请按:2 *n); printf(*n);printf(*n);printf(输入您的选择:); scanf(%d,&w);switch(w) case 1:printf(输入迷宫大小(提示:行列数不能超过50!):); scanf(%d,&g); printf(大小创建完毕,请输入迷宫:n); h=g; shuzu(g,h); for(i=0;i=g*h;i+) topi.c=1; scsu(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=i;j+) printf(%d,%d),topj.x,topj.y); printf(n); for(j=0;jg;j+) for(k=0;kh;k+) if(mazejk=0) printf( ); else if(mazejk=2) printf(O); 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;五、程序实现及测试运行界面:测试:结果输出:六、体会及不足之处 通过此次课程设计,是我对于数据结构有了更深的了解,更新的认识。数据结构是一门重要的课程,只有数据结构学得扎实了,才能对于计算机有更深的应用,所以学好数据结构是很重要的。经过两周的上机设计,我实现了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绵竹中学高2023级2024-2025学年度(下)期末模拟检测(政治)
- 记账实操-金属材料销售公司的账务处理
- 河南省名校大联考2024-2025学年高一下学期4月期中生物试卷(有答案)
- 2024-2025学年下学期高二生物人教版期末必刷常考题之群落及其演替
- 2024-2025学年下学期高二生物沪科版期末必刷常考题之保护环境实现人类与自然的和谐相处
- 山东统考新闻题目及答案
- 软件学院基础题目及答案
- 日语经济题目大全及答案
- 10《静电场中的能量》-2025高中物理水平合格考备考知识清单+习题巩固
- 2 9 函数模型及应用-2026版53高考数学总复习A版精炼
- 2025中国联通福建省分公司招聘112人高频重点提升(共500题)附带答案详解
- 2025年中核汇能有限公司招聘笔试参考题库含答案解析
- 池州八中英才班数学试卷
- 老年照护培训课件
- 2023-2024学年北京市朝阳区四年级下学期期末英语真题及答案
- 幕墙工程项目演练
- 中国人民大学-政治经济学-第12章-社会主义基本经济制度
- 2023年学校管理心理学考试复习题库(含答案)
- 关于纳粹德国元首希特勒的历史资料课件
- 北京石油化工学院《数据采集与预处理》2022-2023学年第一学期期末试卷
- 物业燃气安全培训课件
评论
0/150
提交评论