|
|
|
@ -18,45 +18,38 @@
|
|
|
|
|
|
|
|
|
|
## 1.1 问题描述
|
|
|
|
|
|
|
|
|
|
问题描述和具体要求。
|
|
|
|
|
综合运用线性表、栈和队列、图、查找和排序等数据结构知识,设计一个程
|
|
|
|
|
序能够随机构造指定大小的迷宫,掌握和提高分析、设计、实现及测试程序
|
|
|
|
|
的综合能力。
|
|
|
|
|
要求
|
|
|
|
|
设计一个程序随机生成指定大小的迷宫。一个迷宫是由 m*n 个方格组
|
|
|
|
|
成的矩形区域,每个方格的四周可能存在墙,相邻的两个方格之间如果没有
|
|
|
|
|
墙的阻隔则可以通行,否则无法通行。
|
|
|
|
|
(1)指定迷宫的大小为 m 行 n 列,随机生成迷宫。
|
|
|
|
|
(2)任意两个方格之间都存在通路。
|
|
|
|
|
(3)在不重复通过的情况下,任意两个方格之间有且只有一条通路。
|
|
|
|
|
(4)用文本文件保存迷宫,包括迷宫的大小和每一个被敲掉的墙。
|
|
|
|
|
(5)尝试以图形窗口或文本方式显示迷宫。
|
|
|
|
|
要求系统运行正常、功能完整;数据结构使用得当,算法有较高的效率;代
|
|
|
|
|
码规范、可读性高,结构清晰;具备一定的健壮性、可靠性和可维护性。
|
|
|
|
|
|
|
|
|
|
## 1.2 可行性分析
|
|
|
|
|
|
|
|
|
|
明确解决问题的关键,核心数据结构,核心算法等。
|
|
|
|
|
|
|
|
|
|
确定解决问题的总体思路和方案。
|
|
|
|
|
如果让所有存在通路的单元格组成一个集合,则构造迷宫可以看作是不断打破不同集合之间的墙,直至合并成一个集合的过程。迷宫的初始状态包含所
|
|
|
|
|
有的墙,每个单元格属于一个独立的集合。随机敲掉两个集合之间的一个墙使两者相通,同时令两个集合合并成一个集合。不断重复,直到所有单元格
|
|
|
|
|
都属于一个联通单元格的集合
|
|
|
|
|
对于迷宫,我们一般是用一个二元的数组来存储迷宫中的单元,不同符号表示墙和可以通过的路径。我们的目的是在这个迷宫中找到一条从起点到终点的全部是可通过路径的单元组。
|
|
|
|
|
从起点出发,向其四周探索,如果是可通过单元且没有访问过,则将其入栈并标记为已访问单元,并继续探索其它方向,如果其四周没有未访问的可通过单元,则说明该点为死点,我们就将其出栈。如果碰到终点,则停止探索,同时回溯栈中的点,把栈中的路径中的单元标记出来。
|
|
|
|
|
|
|
|
|
|
## 1.3 需求分析
|
|
|
|
|
|
|
|
|
|
### (1)输入和输出
|
|
|
|
|
|
|
|
|
|
确定系统的主要输入和输出,如可以设定的参数,数据文件等,明确其主要作用。
|
|
|
|
|
|
|
|
|
|
### (2)数据字典
|
|
|
|
|
|
|
|
|
|
描述系统中需要处理的所有数据包含的具体信息。例如:
|
|
|
|
|
|
|
|
|
|
学生 = 学号 + 姓名 + 成绩
|
|
|
|
|
|
|
|
|
|
### (3)数据文件
|
|
|
|
|
|
|
|
|
|
系统中需要读取xx数据文件以获取xx数据,或者需要导出xx数据。举例说明xx数据文件的具体格式。
|
|
|
|
|
|
|
|
|
|
### (4)参数设定
|
|
|
|
|
|
|
|
|
|
系统开始运行时,需要设置的参数。可以用户手册的形式给出设定参数的过程,如系统提示信息和用户输入等。
|
|
|
|
|
|
|
|
|
|
### (5)XX功能
|
|
|
|
|
|
|
|
|
|
其他具体功能。
|
|
|
|
|
|
|
|
|
|
首先简要说明该功能的主要作用,可以用户手册的形式给出系统提示信息、用户输入和系统输出等。
|
|
|
|
|
|
|
|
|
|
### (6)XX功能
|
|
|
|
|
|
|
|
|
|
其他功能逐项列出。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(1)输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出;
|
|
|
|
|
输入行和列的长度,来设置迷宫的大小;
|
|
|
|
|
(2)对迷宫,用栈来进行处理,栈是后进先出的线性数据结构,当每走一格时,就对上一格的坐标和向下一格要走的方向进行记录并规定每当遇到死路,即四个方向的“通路成立判断”都不成立时,从栈中取出栈顶元素,就这样到当前坐标值等于终点坐标值时,及循环停止时,栈中的所有元素自下而上就是对路径的全部描述。
|
|
|
|
|
(3)读取输入的迷宫长度(m*n),对迷宫进行搜索路径,找到最短的路径
|
|
|
|
|
(4)迷宫地图的大小和迷宫的入口位置
|
|
|
|
|
(5)合并功能,能够使用户更方便的查看搜索结果,将多个数据合并成一个能够进行更高效的操作。
|
|
|
|
|
(6)递归功能,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
|
|
|
|
|
|
|
|
|
|
# 2. 系统设计
|
|
|
|
|
|
|
|
|
|