《数据结构课程设计 》报告
题目:深度与广度优先搜索
--迷宫问题
专 业 计算机科学与技术
学生姓名 李柏
班 级 B 计算机 115
学 号 1110704512
指导教师 巩 永 旺
完成日期 2013 年 1 月 11 日
程序实践报告(2010 )
目 录
1 简介1
2 算法说明1
3 测试结果3
4 分析与探讨6
5 小结8
附 录10
附录 1 源程序清单10
程序实践报告(2010 )
迷宫问题
1 简介
1、图的存储结构
图的存储结构又称图的表示,其最常用的方法是邻接矩阵和邻接表。无论采用
什么存储方式,其目标总是相同的,既不仅要存储图中各个顶点的信息,同时还要
存储顶点之间的所有关系。
2 、图的遍历
图的遍历就是从指定的某个顶点(称其为初始点)出发,按照一定的搜索方法
对图中的所有顶点各做一次访问过程。根据搜索方法不同,遍历一般分为深度优先
搜索遍历和广度优先搜索遍历。
本实验中用到的是广度优先搜索遍历。即首先访问初始点v ,并将其标记为已
i
访问过,接着访问 v 的所有未被访问过的邻接点,顺序任意,并均标记为已访问过,
i
以此类推,直到图中所有和初始点 v 有路径相通的顶点都被访问过为止。鉴于广度
i
优先搜索是将所有路径同时按照顺序遍历,直到遍历出迷宫出口,生成的路径为最
短路径。因此我们采用了广度优先搜索。
无论是深度优先搜索还是广度优先搜索,其本质都是将图的二维顶点结构线性
化的过程,并将当前顶点相邻的未被访问的顶点作为下一个顶点。广度优先搜索采
用队列作为数据结构。
本实验的目的是设计一个程序,实现手动或者自动生成一个 n ×m 矩阵的迷宫,
寻找一条从入口点到出口点的通路。具体实验内容如下:
选择手动或者自动生成一个 n×m 的迷宫,将迷宫的左上角作入口,右下角作
出口,设 “0 ”为通路, “1”为墙,即无法穿越。假设一只老鼠从起点出发,目的
为右下角终点,可向 “上、下、左、右、左上、左下、右上、右下”8 个方向行走。
如果迷宫可以走通,则用“■”代表“1”,用“□”代表“0 ”,用“☆”代表行
走迷宫的路径。输出迷宫原型图、迷宫路线图以及迷宫行走路径。如果迷宫为死迷
宫,则只输出迷宫原型图。
2 算法说明
迷宫中存在通路和障碍,为了方便迷宫的创建,可用 0 表示通路,用 1 表示障
碍,这样迷宫就可以用 0、1 矩阵来描述。设置迷宫的长为 n、宽为 m,范围为 49×
49,用 int maze[N+2][M+2]来表示,这样相当于在迷宫外层包了一层 1,即防止搜
索路径时跳出迷宫。
(1)手动生成迷宫
1
程序实践报告(2010 )
void hand_maze(int m,int n) //手动生成迷宫
{
int i,j;
for(i=0;i
for(j=0;j
{
cin>>maze[i][j];