迷宫
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5、 在创建设计时就应该能够评估质量。 6、 评审设计以减少语义性的错误。 软件设计包括软件的结构设计,数据设计,接口设计和过程设 计. 结构设计是指:定义软件系统各主要部件之间的关系 数据设计是指:将模型转换成数据结构的定义 接口设计是指:软件内部,软件和操作系统间以及软件和人之间 如何通信 过程设计是指:系统结构部件转换成软件的过程描述
工 作 内 容
选定题目,查Байду номын сангаас资料;明确课题要求、确定数据结构、 算法描述,并分析算法复杂度;编写程序,准备测试数 据等。 根据所选课题,上机调试程序并进行测试,实现课题要 求的功能。 上机演示,回答教师提问,并撰写课程设计报告。
指导教师:张亚红 张永军 2009 年 6 月 12 日
摘要: 本文详细介绍了迷宫问题的设计与实现,该程序具有迷宫的设计生 成、逃离迷宫的路线的寻找、打印逃离路线及标拄了逃离路线的迷宫等 功能。在课程设计中,程序设计语言采用Visual C++,程序运行平台为 Windows 98/2000/XP。对于迷宫逃离路线的产生及打印本系统采用了栈 的结构,有利于数据的存储与输出。在设计该程序时采用了挨个试探的 方法,简单易懂。程序通过调试运行,实现了最初的设计目标,并且经 过适当完善后,可以求出迷宫逃离路线的最短行程,在实际中可以解决 更多的问题。 关键词:c++;结构体;栈结构;链表
认识造成的,严格的来说VC++不是门语言,虽然它和C++之间有密切 的关系,如果形象点比喻的话,可以把C++看作为一种“工业标准”,而 VC++则是某种操作系统平台下的“厂商标准”,而“厂商标准”是在遵 循“工业标准”的前提下扩展而来的。 VC++应用程序的开发主要有两种模式,一种是WIN API方式,另 一种则是MFC方式,传统的WIN API开发方式比较繁琐,而MFC则是 对WIN API再次封装,所以MFC相对于WIN API开发更具备效率优 势,但为了对WINDOWS开发有一个较为全面细致的认识,笔者在这 里还是以讲解WIN API的相关内容为主线。 话说到这里可能更多人关心的是学习VC++需要具备什么条件, 为什么对于这扇门屡攻不破呢? 要想学习好VC必须具备良好的C/C++的基础,必要的英语阅读能 力也是必不可少的,因为大量的技术文档多以英文形式发布。 VC基于C,C++语言,主要由是MFC组成,是与系统联系非常紧 密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵 活,执行效率高,几乎可说VC在 Windows平台无所不能。 最大缺点 是开发效率不高。 VC适用范围 1、 VC主要是针对Windows系统,适合一些系统级的开发,可以 方便实现一些底层 的调用。在VC里边嵌入汇编语言很简单。 2、 VC主要用在驱动程序开发 3、 VC执行效率高,当对系统性能要求很高的时候,可用VC开 发。 4、 VC主要适用于游戏开发 5、 VC多用于单片机,工业控制等软件开发,如直接对I/O地址 操作,就要用C++。 6、 VC适用开发高效,短小,轻量级的COM组件,DLL。比如 WEB上的控件。
3.3详细代码设计:
#define M2 12 /*M2*N2为实际使用迷宫数组的大小*/ #define N2 11 #define maxlen M2 // 栈长度 #include <stdio.h> #include<iostream.h> #include <malloc.h> int M=M2-2,N=N2-2;//M*N迷宫的大小 typedef struct //定义栈元素的类型 { int x,y,dir; }elemtype; typedef struct // 定义顺序栈 { elemtype stack [maxlen]; int top; }sqstktp; struct moved //定义方向位移数组的元素类型对于存储坐标增量的方向位
目 录
1需求分析 2概要设计 3详细设计和实现
3.1 软件设计几个方面: 3.2 功能模块设计: 3.3 详细代码设计: 3.4 运行结果:
4调试与操作说明 总结 致谢 参考文献
1需求分析
迷宫实验是取自心理学的一个古典实验。在该实验中,把一只老鼠 从一个无顶大盒子的门放入,在盒中设置了许多墙,对行进方向形成了 多处阻挡。盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷 宫中寻找道路以到达出口。对同一只老鼠重复进行上述实验,一直到老 鼠从入口到出口,而不走错一步。老鼠经多次试验终于得到它学习走迷 宫的路线。设计一个计算机程序对任意设定的迷宫,求出一条从入口到 出口的通路,或得出没有通路的结论。 本次课程设计目的是巩固C++课程所学知识,特别加强数组,指 针,结构体,栈结构的应用,熟悉面向过程的结构化序设计方法,通过 本次课程设计的实践,锻炼程序设计的能力以及用C++解决实际问题的 能力,为以后后续课程的学习打好基础。 在设计中,在Windows xp 操作系统下,利用Microsoft Visual c++语 言对迷宫问题进行设计制作下面将对Microsoft Visual c++进行简要介 绍: VC++是微软公司开发的一个IDE(集成开发环境),换句话说,就是 使用VC++的一个开发平台.有些软件就是这个编出来的...另外还有 VB,VF.只是使用不同语言...但是, VC++是Windows平台上的C++编程环境,学习VC要了解很多 Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度 比较大。Windows下编程需要了解Windows的消息机制以及回调 (callback)函数的原理;MFC是Win32API的包装类,需要理解文档 视图类的结构,窗口类的结构,消息流向等等;COM是代码共享的二 进制标准,需要掌握其基本原理等等。 VC作为一个主流的开发平台一直深受编程爱好者的喜爱,但是很 多人却对它的入门感到难于上青天,究其原因主要是大家对他错误的
3.2功能模块设计:
系统算法: (1)建立迷宫节点的结构类型stack[]。 (2)入迷宫图形 0表示可以通 maze[m+2][n+2]进行存储。 定。 (3)函数path()对迷宫进行处理,从入口开始: While(!((s->top==-1)&&(dir>=7)||(x==M)&&(y==N)&&(maze[x] [y]==-1))) { For(扫描八个可以走的方向) { If(找到一个可以走的方向) { 进入栈 标志在当前点可以找到一个可以走的方向 1表示不可以通。 用二维数组
maze应该声明为maze[m+2],[n+2]在迷宫行进时,可能有多个行进方向 可选,我们可以规定方向搜索的次序是从东(E)沿顺时针方向进行。 为了简化问题,规定[i],[j]的下一步位置的坐标是[x],[y],并将这8个方 位伤的x和y坐标的增量预先放在一个结构数组move[8]中(见图2)。该 数组的每个分量有两个域dx和dy。例如 要向东走,只要在j值上加上 dy,就可以得到下一步位置的[x],[y]值为[i],[j+dy]。于是搜索方向的变 化只要令方向值dir从0增至7,便可以从move数组中得到从[i],[j]点出发 搜索到的每一个相邻点[x],[y]。 x=i+move[dir].dx y=j+move[dir].dy
1、 2、 3、 4、 5、 对系统进行功能模块分析、控制模块分析正确; 数据结构设计要实用; 算法简练,可读性好,功能比较全面; 说明书、流程图要清楚; 可采用面向过程或面向对象设计方法进行设计,建议用面向对象设计方法。
实验 环境 任务 要求
工作进度计划 序号 1 2 3 起止日期
2009-6-8—2009-6-10 2009-6-10—2009-112009-6-12—2009-6-12
开始 初始化迷宫,显示迷宫 初始化方向位移数组 寻找迷宫中的一条出路 If maze[x][y]==0 设1,1为出口 该点数据入栈 T F While 栈不空且dir<7 do elseIf dir<7 dir++ T F 回退一步 出口或入口
dir>=7 或栈空 显示通路 结束 图3-1 算法流程图
淮阴工学院
数据结构课程设计报告
选题名称: 系(院): 专 班 姓 业: 级:
迷宫问题 计算机工程系 计算机科学与技术 网络107 张亚红 张永军 2008 ~ 2009 学年 第 2 学期
名: 匡玉龙 学 号: 1071304112
指导教师: 学年学期:
2009
年
6
月 20
日
设计任务书
课题 名称 设计 目的 迷宫问题 巩固C++课程所学知识,特别加强数组,指针,结构体, 栈结构的应用,熟悉面向过程的结构化序设计方法,通过本次 课程设计的实践,锻炼程序设计的能力以及用C++解决实际问 题的能力,为以后后续课程的学习打好基础。 Microsoft Visual c++ Windows xp 操作系统
总体功能设计: (1)设置一个迷宫节点的数据结构。 (2)建立迷宫图形。 (3)对迷宫进行处理找出一条从入口点到出口点的路径。 (4)输出该路径。 (5)打印通路迷宫图。
初始化迷宫 通过随机方法设置迷宫布局 建立并输出迷宫原图 搜索迷宫通路 输出迷宫通路及路线图 结束 图2-1 功能结构图
当迷宫采用二维数组表示时,老鼠在迷宫任一时刻的位置可由数组 的行列序号i,j来表示。而从 [i],[j]位置出发可能进行的方向见下图1.如 果[i],[j]周围的位置均为0值,则老鼠可以选择这8个位置中的任一个作为 它的下一位置。将这8个方向分别记作:E(东)、SE(东南)、 S(南)SW(西南)W(西)、NW(西北)、N(北)和NE(东 北)。但是并非每一个位置都有8个相邻位置。如果[i],[j]位于边界上, 即i=1,或i=m,或j=1,或j=n,则相邻位置可能是3个或5个为了避免检 查边界条件,将数组四周围用值为1的边框包围起来,这样二维数组
dx dy
图2-2 方向位移图
图2-3向量差图
为了防止重走原路,我们规定对已经走过的位置,将原值为0改 为-1,这既可以区别该位置是否已经走到过,又可以与边界值1相区 别。当整个搜索过程结束后可以将所有的-1改回到0,从而恢复迷宫原
样。 这样计算机走迷宫的方法是:采取一步一步试探的方法。每一步都 从(E)开始,按顺时针对8个方向进行探测,若某个方位上的maze[x], [y]=0,表示可以通行,则走一步;若maze[x],[y]=1,表示此方向不可通 行须换方向再试。直至8个方向都试过,maze[x],[y]均为1,说明此步已 无路可走,需退回一步,在上一步的下一个方向重新开始探测。为此需 要设置一个栈,用来记录所走过的位置和方向(i,j,dir)。 当退回一步时,就从栈中退出一个元素,以便在上一个位置的下一 个方向上探测,如又找到一个行进方向,则把当前位置和新的方向重新 进栈,并走到新的位置。如果探测到x=m,y=n,则已经到达迷宫的出 口,可以停止检测,输出存在栈中的路径;若在某一位置的8个方向上 都堵塞,则退回一步,继续探测,如果已经退到迷宫的入口(栈中无元 素),则表示此迷宫无路径可通行。
7、 VC可以开发优秀的基于通信的程序。 8、 VC可以开发高效灵活的文件操作程序。 9、 VC可以开发灵活高效的数据库操作程序。 10、 VC是编CAD软件的唯一选择!!!包括AUTOCAD,UG的二 次开发。 11、VC在多线程、网络通信、分布应用方面,VC++有不可比拟的 优势。
2概要设计
数组四周用1表示墙壁,其中入口点(1,1)与出口点(m,n)固
避免重复选择maze[x][y]=-1 不再对当前节点扫描 } If(八个方向已经被全部扫描过,无可以通的路) { 标志当前节点没有往前的路 后退一个节点搜索 } } If(找到了目的地) { 输出路径退出循环 } } 未找到路径 (4)输出从入口点到出口点的一条路径。 (5)输出标有通路的迷宫图。 算法流程图:
3详细设计和实现 3.1软件设计几个方面:
一、 抽象: 我们把迷宫问题抽象化,把迷宫看作一个矩阵,对 于矩阵中的任意个位置都有八个方向可以进行下一步,而路径的保存 则可以利用栈结构保存矩阵在该点的坐标即可。 二、 模块化:将整个系统根据功能作用划分为多个部分以方便程 序的读写及修改,增加程序的可读性友好性,也使整个系统的设计更 具条理。 三、软件的设计原则应遵循以下几个方面: 1、 设计对于分析模型应该是可跟踪的:软件的模块可能被映射 到多个需求上。 2、 设计结构应该尽可能的模拟实际问题。 3、 设计应该表现出一致性。 4、 不要把设计当成编写代码。