预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

吉林工程技术师范学院 《数据结构》课程设计报告书 设计题目:迷宫求解 专业:班级: 学生姓名:学号: 指导教师: 2012年12月 信息工程学院 目录 摘要II 第一章问题描述1 第二章设计思路2 第三章课程设计总体方案及分析3 第四章调试分析10 总结12 附录:III 1.程序清单III 2.文献VII 摘要 设计一个简单程序,来实现迷宫的求解,首先在设计的时候就想了一下,应该运用到 那些知识,不管是C语言还是数据结构的首先我们想到是运用到什么相关知识,设计一个 计算机程序对任意设定的矩形迷宫,求出一条从入口到出口的通路,或得出没有通路的结 论。 首先从迷宫的入口开始,如果该位置就是迷宫出口,则已经找到了一条路径,搜索工 作结束。否则搜索其上、下、左、右位置是否是障碍,若不是障碍,就移动到该位置,然 后再从该位置开始搜索通往出口的路径;若是障碍就选择另一个相邻的位置,并从它开始 搜索路径。为防止搜索重复出现,则将已搜索过的位置标记为2,同时保留搜索痕迹,在 考虑进入下一个位置搜索之前,将当前位置保存在一个队列中,如果所有相邻的非障碍位 置均被搜索过,且未找到通往出口的路径,则表明不存在从入口到出口的路径。这实现的 是广度优先遍历的算法,如果找到路径,则为最短路径。 本课程我将用源代码和流程图来说明和设计我的论文。 关键字:迷宫求解、数据结构、C语言 第一章问题描述 迷宫问题是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒 子的门放入,在盒子中设置了许多墙,对行进方向形成了多处阻挡。盒子仅有一个出口, 在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。对同一只老鼠重复进行 上述实验,一直到老鼠从入口走到出口,而不走错一步。老鼠经过多次试验最终学会走通 迷宫的路线。设计一个计算机程序对任意设定的矩形迷宫如下图A所示,求出一条从入口 到出口的通路,或得出没有通路的结论。 图A 第二章设计思路 2.1设计要求 要求设计程序输出如下: (1)建立一个大小为m×n的任意迷宫(迷宫数据可由用户输入或由程序自动生成),并在 屏幕上显示出来; (2)找出一条通路的二元组(i,j)数据序列,(i,j)表示通路上某一点的坐标。 (3)用一种标志(如数字8)在迷宫中标出该条通路; (4)在屏幕上输出迷宫和通路; (5)上述功能可用菜单选择。 第三章课程设计总体方案及分析 3.1问题分析: 1.迷宫的建立: 迷宫中存在通路和障碍,为了方便迷宫的创建,可用0表示通路,用1表示障碍,这样 迷宫就可以用0、1矩阵来描述, 2.迷宫的存储: 迷宫是一个矩形区域,可以使用二维数组表示迷宫,这样迷宫的每一个位置都可以用 其行列号来唯一指定,但是二维数组不能动态定义其大小,我们可以考虑先定义一个较大 的二维数组maze[M+2][N+2],然后用它的前m行n列来存放元素,即可得到一个m×n的二维 数组,这样(0,0)表示迷宫入口位置,(m-1,n-1)表示迷宫出口位置。 注:其中M,N分别表示迷宫最大行、列数,本程序M、N的缺省值为39、39,当然,用户也 可根据需要,调整其大小。 3.迷宫路径的搜索: 首先从迷宫的入口开始,如果该位置就是迷宫出口,则已经找到了一条路径,搜索工 作结束。否则搜索其上、下、左、右位置是否是障碍,若不是障碍,就移动到该位置,然 后再从该位置开始搜索通往出口的路径;若是障碍就选择另一个相邻的位置,并从它开始 搜索路径。为防止搜索重复出现,则将已搜索过的位置标记为2,同时保留搜索痕迹,在 考虑进入下一个位置搜索之前,将当前位置保存在一个队列中,如果所有相邻的非障碍位 置均被搜索过,且未找到通往出口的路径,则表明不存在从入口到出口的路径。这实现的 是广度优先遍历的算法,如果找到路径,则为最短路径。 以矩阵00101为例,来示范一下 10010 10001 00100 首先,将位置(0,0)(序号0)放入队列中,其前节点为空,从它开始搜索,其标记 变为2,由于其只有一个非障碍位置,所以接下来移动到(0,1)(序号1),其前节点序号为 0,标记变为2,然后从(0,1)移动到(1,1)(序号2),放入队列中,其前节点序号为1,(1, 1)存在(1,2)(序号3)、(2,1)(序号4)两个可移动位置,其前节点序号均为2.对于每一个 非障碍位置,它的相邻非障碍节点均入队列,且它们的前节点序号均为该位置的序号,所 以如果存在路径,则从出口处节点的位置,逆序就可以找到其从出口到入口的通路。 如下表所示: 0123456789 10 (0,0)(0,1)(1,1)(1,2)(2,1)(2,2)(1,3)(2,3)(0,3)(3,3)-1012234567由此可 以看出,得到最短路径