文档介绍:第一章:设计问题描述与分析 1
课程设计内容 1
问题分析 1
•功能实现 2
•运行环境 3
第二章:算法设计与流程图 4
主函数的流程图 4
概要设计 5
6
节点类型和指针类型 6
迷宫的操作 6
(1 )生成迷宫 6
打印迷宫矩阵与字符图形 7
迷宫求解路由求解操作 7
打印迷宫通路坐标 8
输出迷宫通路的字符图形 8
主函数 9
第三章:调试分析 10
第四章:使用说明 11
第五章:测试结果 12
附录1 19
附录2 19
第一章:设计问题描述与分析
课程设计内容:
该系统是由C语言编写的生成一个NX M(N行M列)的迷宫,完成迷宫的组织和 存储,并实现迷宫路由算法。基本要求1、 N和M是用户可配置的,缺省值为50 和50。2、迷宫的入口和出口分别在左上角和右下角。
提示:(1)可以使用二维数组maze[M+2][N+2]表示迷宫,其中M,N为迷宫的 行、列数,当元素值为0时表示该点是通路,当元素值为1时表示该点是墙。老鼠 在每一点都有4种方向可以走,可以用数组 move[4]来表示每一个方向上的横纵坐 标的偏移量,可用另一个二维数组 mark[M+2][N+2]记录节点的访问情况。(2)可 以选用深度优先算法或广度优先算法实行,迷宫可由自动或手动生成。测试用例应 该包含有解迷宫和无解迷宫。
问题分析
本程序要求实现迷宫问题的相关操作,包括迷宫的组织和存储,并实现迷宫路 由算法(即查找迷宫路径)。程序所能达到的:具体包括迷宫的建立,迷宫的存储 (迷宫由自动生成或手动生成),迷宫中路径的查找
迷宫是一个矩形区域,迷宫存在一个入口和一个出口,其内部包含了不能穿越 的墙或者障碍。迷宫的建立即是建立这样一个迷宫矩阵,用于存储迷宫信息,包括 可穿越的路和不可穿越的墙或者障碍,分别用 0表示通路,1表示障碍。对于迷宫
矩阵,用mxn的矩阵来描述,m和n分别代表迷宫的行数和列数。这样,则迷宫 中的每个位置都可以用其行号和列号来指定。从入口到出口的路径是由一组位置构 成的。每个位置上都没有障碍,且每个位置(第一个除外)都是前一个位置的上、 下、左、右的邻居。
为了描述迷宫中位置(i,j)处有无障碍,规定,当位置(i,j)处有一个障 碍时,其值为
、1矩阵来描述,在构造矩阵时,为 了操作方便会将矩阵四周置为1 (不通)。
对于查找迷宫路由问题
首先,考察,迷宫的入口位置,如果该位置就是迷宫出口,则已经找到了一条 路径,搜索工作结束。否则,考察其上、下、左、右位置上的邻居是否是障碍,若 不是就移动到这个相邻位置上,然后对于这个位置开始搜索通往出口的路径。如果 不成功,就选择另一个相邻的位置,并从它开始搜索路径。为防止搜索出现重复, 则将已搜索过的位置标记为1。同时为保留过搜索的痕迹,在考察相邻位置之前, 将当前位置保存在一个堆栈中,如果所有相邻的非障碍位置均被搜索过,且未能找 到通往出口的路径,则表明不存在从入口到出口的路径。且对于此,实现的是深度 优先遍历算法,如果查找到路径,贝U为从入口到出口的路径。
下面实现如何利用堆栈实行深度优先遍历算法进行迷宫最短路径的查找。
以矩阵1111111
1 00101 1
1 10010 1
1 10001 1
1 00100 1
1111111
首先,将位置(1, 1)放入堆栈中,从它开始搜索,标记。由于其只有一个非 障碍位置,所以接下来移动到(1, 2),防止稍后的搜索再经过这个位置。
从(1, 2)移动到(2, 2),放入堆栈中,(2, 2)存在(2,3)、(3, 2)两个可移 动位置。标记已被搜索过,对于每一个非障碍位置,它的相邻非障碍节点均入队列, 实现了深度优先遍历算法。所以如果存在路径,则从出口处节点的位置,逆序则可
以找到其从出口到入口的通路。实现了查找路径。
.功能实现:
1、数据输入形式和输入值的范围:生成迷宫时可选择手动或者自动生成;手 动输入迷宫矩阵时以0表示无障碍为通路,1表示该点有障碍为墙。所有输入中, 元素的值均为整数。
2、结果的输出形式:当完成迷宫生成后,会提示输入入口与出口,进入迷宫路 由查找算法,如找到出口,则打印出路径矩阵坐标,并显示显示迷宫生成图形
3、测试数据:
a、 进入界面,选择2,自动生成
b、 输入入口与出口
c、 查看结果
.运行环境:
运行环境为DOS
第二章:算法设计与流程图
:
栈不为空且栈顶非
出口
栈顶位置下面可通?
N
栈顶位置上面可通?
找出通路,链栈内即为通路
5
循环结束
将