收藏 分享(赏)

漫步迷宫.doc

上传人:hskm5268 文档编号:9085826 上传时间:2019-07-23 格式:DOC 页数:6 大小:66.50KB
下载 相关 举报
漫步迷宫.doc_第1页
第1页 / 共6页
漫步迷宫.doc_第2页
第2页 / 共6页
漫步迷宫.doc_第3页
第3页 / 共6页
漫步迷宫.doc_第4页
第4页 / 共6页
漫步迷宫.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、湖南科技大学课程设计报告题目:_院 系:_专业班级:_学 号:_学生姓名:_指导教师:_年 月 日漫步迷宫MAZE1、问题分析(1)迷宫是一个 m 行 n 列的方格,可以用二维数组来存储迷宫。迷宫采用 matrix 类型的二维数组 A 表示。A.rownum 和 A.colnum 分别表示迷宫的实际行数和列数。而 A.mazeij表示迷宫中第 i 行第 j列的一个方格。问题描述上面说有斜线的方格表示不可通的(如图1.0) ,对于方格通与不通是两种情况,可以用数字 0 表示这个方格是通的即 A.mazeij=0,用 1 表示这个方格是不可通的即 A.mazeij=1。这样就可以把迷宫在计算机里面

2、存储起来,对于最外面那一层,可以通过添加一个“外墙” ,即把整个迷宫用数字 1 进行包围。如图1.1,描述的就是一个 610 的迷宫: 图 1.0(2)由于要寻找从入口到出口的一条最短路径,那么只要我们把迷宫看作是一个图的结构,则问题就转化为了寻找从入口点到出口点的一条最短路径的问题,那么我们只需要从入口点出发,对图进行广度优先搜索遍历,直到遇到出口或者是遍历完毕也没有找到出口点为止。然后记下走过的路径,即可以求得最短路径。1 1 1 1 1 1 1 1 1 1 1 11 0 1 1 1 1 1 1 1 1 1 11 0 1 0 0 1 0 0 0 1 1 11 0 0 0 1 1 0 1 0

3、 0 1 11 0 1 1 0 0 0 1 1 0 1 11 0 0 0 0 1 0 0 0 0 1 11 1 1 1 1 1 1 1 1 0 0 11 1 1 1 1 1 1 1 1 1 1 1图 1.1(3)基于上述的分析,我们要用到图的遍历,所以必须把二维数组 A 转化为以 adjlist 类型的邻接表表示的图结构 G。将迷宫的每个格子都看做一个顶点。不可通行的方格都是孤立顶点;相邻的可通方格所对应的顶点间是有边相连的。因此,迷宫可以转化为有mn 个顶点以及无向边够成的图了。这个问题转化:判定入口顶点与出口顶点是不是在同一个连通分量里面。在图结构 G 中间,G.adjk表示编号为 k 的

4、顶点的邻接情况的单链表的头指针;G.vexnum 表示图 G 中的实际顶点数,而且具有如下关系:G.vexnum = A.rownum*A.colnum。(4)为了避免迷宫数据的重复输入,所以将 A 自动转换为G。设计个算法 create_adjlist(A,G)。以行主序对图的顶点进行编号,顶点编号(即 vexno)和迷宫中方格的坐标关系有:Vexno = (row - 1) * n + col;Row = (vexno 1) / n + 1;Col = (vexno 1) % n + 1;(5)在进行广度优先搜索遍历时求解最短路径时,我们还需要设置一个队列 queue 作为辅助数据结构;

5、路径采用一个整数数组pred 来表示。这两个结构存储的类型均为 lsit 类型。队列 queue 应该设置 front 和 rear 分别指示队首和队尾,queuek表示第 k 个入队的顶点编号。采用 pred记录路径,predi表示顶点 i 在广度优先搜索遍历的过程中的前驱顶点的编号,它表明是经过边(predi , i)达到顶点 i 的。搜索成功后可以根据(4)中的公式到推出方格的坐标。2、数据结构描述#define MAX_WIDTH 20/迷宫地图最大的宽度#define MAX_HEIGHT 20 /迷宫地图的最大高度/定义迷宫地图typedef struct MazeTypeint

6、mazeMAX_HEIGHTMAX_WIDTH; /矩阵 int rownum;/行总数int colnum;/列总数MazeType;#define MAX_VERTEX_NUM 200 /定义最大顶点个数/定义图节点Typedef struct ArcCellint adj; /VRType 是顶点关系类型 对无权图,用 1 或 0 表示相邻否ArcCell,AdjMatrixMAX_VERTEX_NUM MAX_VERTEX_NUM;typedef structint vexsMAX_VERTEX_NUM; /顶点向量AdjMatrix arcs; /邻接矩阵int vexnum,arc

7、num; /图当前的顶点数和边数MGraph;typedef struct ArcNodeint adjvex; /该弧所指向的顶点的位置struct ArcNode *nextarc; /指向下一条弧的指针int no;/定义单链队列 队列链式存储结构typedef struct QNode /定义队列上的节点int no; /节点的编号struct QNode *next; /指向下一个节点QNode,*QueuePtr; typedef structQueuePtr front; /队头指针QueuePtr rear; /队尾指针Queue;3、算法设计Create_adjList(MazeType i G.vexnum; +i)for(i = 0; I A.rownum ; i+) for(j = 0 ;j A.colnum ; j+)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报