c语言迷宫求解课程设计_第1页
c语言迷宫求解课程设计_第2页
c语言迷宫求解课程设计_第3页
c语言迷宫求解课程设计_第4页
c语言迷宫求解课程设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

目 录 1 前言. 1 2 需求分析. 2 2.1 课程设计目的. 2 2.2 课程设计任务. 2 2.3 设计环境. 2 2.4 开发语言. 2 3 分析和设计. 2 3.1 模块设计. 2 3.2 系统流程图. 3 3.3 主要模块的流程图. 7 4 具体代码实现. 11 5 课程设计总结.22 5.1 程序运行结果.22 5.2 课程设计体会.23 参考文献.23 致谢.23 1 前言 本课程设计是关于数据结构和栈道的基本操作, 使用 c 语言编程,定义合适的数 据结构,对已经学习的 c 语言的指针,数据结构和栈道加以了解。对于程序设计课程 的运用和学习。 2 需求分析 2.1 课程设计目的 学生在教师指导下运用所学课程的知识来研究、 解决一些具有一定综合性问题的 专业课题。通过课程设计(论文) ,提高学生综合运用所学知识来解决实际问题、使 用文献资料、及进行科学实验或技术设计的初步能力,为毕业设计(论文)打基础。 2.2 课程设计任务 给出迷宫的入口和出口及相关的通路,求出从入口到出口的路径。要求使用C 语言编程,定义合适的数据结构。最后,需要说明设计思想,同时给出能够运行的源 程序,并给出对应的程序流程图 2.3 设计环境 (1)WINDOWS 2000/2003/XP/7/Vista系统 (2)Visual C+或TC集成开发环境 2.4 开发语言 C语言 3 分析和设计 3.1 模块设计 定义SHU、MG结构体类型, 产生记忆效果,以及用线性链表来进行地图更改。 1 typedef struct shuju int data; int flag; /*判断这个位置是否被走过,使其产生记忆效果*/ SHU; typedef struct maze int c; int flag; int direct; int x; int y; struct maze *next; MG; 定义pop()函数,用来进行入栈操作。 定义 way() 函数,用来寻找迷宫地图正确的路径。 2 寻找路径函数*/ /* 3.23.2 系统流程图系统流程图 开始 定义相关变量以 及结构体数组 给5行5列的迷宫 赋值为 8 的矩阵 输出原始矩 阵迷宫地图 输出提示用户 输入 0 或 1 输入 25 个后迷 宫地图创建完成 刷屏输出用户创 建地图 提示用户输入入口 坐标并接收其值 提示用户输入出口 坐标并接收其值 判断是否有入口位 置,如没有要求重新 输 入直至合法 调用 pop 函数进行 入栈操作 调用 way 函数来进 行路径判断输出图 结束 图 3.1 系统流程图 3 3.3 主要模块的流程图 定义相关变量开辟 一个 MG 结构体内 存单元并赋其值 判断是否 为首次定 N 义 MG Y MG 头指针指向其 刚定义的结构体 MG 结构体的 next 指针指向头指针 MG 头指针 next 指 针指向 NULL MG 头指针指向其 刚定义的结构体 刷屏并输出迷宫地 图 其刚定义的结构体 作为返回值返回 图 3.2 POP 入栈流 程图 4 头指针不 为 NULL N 定义相关变量 并相应赋值 Y 判断x,y是否 与出口相等 Y Y 头 指 针 标 记变量为 1N Y 取出头指针的两个 坐标 x,y 判断头指针 的左方向是 否为 4 N Y 头指针的左方向的 值自减 Y 判断数组下 标是否超过 界限 1 2 3 4 5 Y 判断下列的 值表示为通 且标量为 0 Y 调用 pop 函数入栈 判断头指针 的下方向是 否为 3 N Y 头指针的下方向的 值自减 Y 判断数组下 标是否超过 界限 Y 判断下行的 值表示为通 且标量为 0 调用 pop 函数入栈 2 6 34 判断头指针 的左方向是 否为 2N Y 头指针的左方向的 值自减 判断数组下 标是否超过 界限 Y 判断下列的 值表示为通 且标量为 0 Y 调用 pop 函数入栈 判断头指针 的上方向是 否为 1N Y 1 7 34 头指针的左方向的 值自减 判断数组下 标是否超过 界限 判断下列的 值表示为通 且标量为 0 调用 pop 函数入栈 给标记赋 1,地图标 量赋 0,头指针指向 next 并清屏 输出判断路径的迷 宫地图 返回 f 的值 图 3.2 way 寻找路 径函数流程图 8 4 具体代码实现 #include #include #include #include #include #include #include #include #define M 5 /*规定迷宫的行数*/ #define N 5 /*规定迷宫的列数*/ int i=0; typedef struct shuju int data; int flag;/*判断这个位置是否被走过,使其产生记 忆效果*/ SHU; typedef struct maze int c; int flag; int direct; int x; int y; struct maze *next; MG; MG *top,*p; MG * pop(int bb,int xx,int yy,SHU tMN) /*入栈操作*/ int i2,j2; i+; p=(MG *)malloc(sizeof(MG); 9 p-c=bb; p-flag=1; p-direct=4; p-x=xx; p-y=yy; if(i=1) top=p; top-next=NULL; else p-next=top; top=p; system(cls); for(i2=0;i2x; y=top-y; if(x=x1 break; /*判断右方向*/ if(top-direct=4) top-direct-; if(0=y+1 if(0=x+1 if(0flag=0; if(0xtop-y.flag=1; top=top-next; system(cls); for(i1=0;i1M;i1+) printf(n); for(j1=0;j1N;j1+) if(si1j1.data=8) cprintf(%3d,si1j1.data); else cprintf(%3d,si1j1.data); return f; void main() SHUsMN; 12 int x,y,x1,y1; int i1,j1,i,j,F; for(i1=0;i1M;i1+) for(j1=0;j1N;j1+) /*迷宫图 面,用一个数字表示*/ si1j1.data=8; for(i1=0;i1M;i1+) printf(n); for(j1=0;j1N;j1+) printf(%3d,si1j1.data); /* 打 印 迷 宫 最 原 始 的 界 面 , 用 数 字 8表 示 每 个 位置*/ printf(n请输入0或1来表示迷宫地图-0为通-1为不通n); for(i1=0;i1M;i1+) for(j1=0;j1N;j1+) printf(nb%d%d=,i1,j1); scanf(%d, 宫,0代表通,1代表不通*/ si1j1.flag=0; system(cls); for(i=0;iM;i+) printf(n); for(j=0;jN;j+) if(sij.data=0) cprintf(%3d,sij.data); else if(sij.data=1) cprintf(%3d,sij.data); 13 /*绘制迷 else cprintf(%3d,sij.data); printf(nmi gong tu is :); for(i1=0;i1M;i1+) printf(n); for(j1=0;j1N;j1+) printf(%3d,si1j1.data); printf(n输入迷宫的入口坐标(X,Y)n for example input:0 0ninput:);/* 输入迷宫的入口坐标(X,Y)*/ scanf(%d %d, printf(输入迷宫的出口坐标(X1, Y1)n for example input:3 3ninput:);/* 输入迷宫的出口坐标(X1,Y1)*/ scanf(%d %d, printf(press any key to continue:); getch(); while(sxy.data!=0) /*判断是否有入口位置*/ printf(Not find ru koun); printf(please input again: ); scanf(%d %d,x,y); pop(sxy.data=8,x,y,s); F=way(x1,y1,s); /*路径进行判 断函数*/ 14 if(F=0) cprintf(rn本迷宫没有解!n); else cprintf(rn本迷宫有解:n); cprintf(rnpress any key to quit.n); getch(); 5 课程设计总结 5.1 程序运行结果 首先通过输入给数组赋值,创建迷宫地图,再输入迷宫的入口,以及迷宫的出口,判 断迷宫是否有没有正确的线路,如果有解,则输出正确迷宫地图线路。如果没有解, 则输出无解迷宫地图线路。 15 。 5.2 课程设计体会 通过这次数据的建立的实验, 掌握了数据结构的基本操作,也使我对数据结构实 质了解更加明确, 对它的一些基本操作也更加熟悉了, 在实验输入编码的时候要仔细, 小心,耐心,我才能减少输入编码的错误。如一个小小的符号错误,就会导致你的编 译将不能成功。在写代码的时,我们要查一些资料,问同学,问老师,也增加同学与 老师和同学与同学之间的友谊, 使我增加了做一些事还要合作精神,更重要增加了我 们的知识。 在实验中我们意识到不能想当然的直接编译执行,应当在阅读并理解源代 码的基础上执行,这才是我们做这个实验的意义吧。理论与实践结合。 1 张福祥. C 语言程序设计M. 沈阳:辽宁大学出版社,2010.1 2 张福祥, 王萌 C 语言程序设计习题解答与实验实训M 沈阳: 辽宁大学出版社, 2010.1 3 牛莉,刘远军等计算机等级考试辅导教程M北京:中国铁道出

温馨提示

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

评论

0/150

提交评论