包含功能:
1.自定义迷宫大小
2.使用图的深度遍历随机生成迷宫
3.用户使用鼠标绘制自定义迷宫
4.单步求解迷宫
5.一键求解迷宫
6.声音特效
完整项目下载:
程序截图:
一、系统开发平台
迷宫老鼠:利用堆栈寻找迷宫的路径解法。
编程语言:Java
开发工具:Eclipse
操作系统:Windows
二、系统规划
2.1 任务陈述
迷宫老鼠的应用主要用于
解决迷宫的寻径问题。
2.2 任务目标
解决迷宫问题:入口A进入,出口B走出
随机设计一个迷宫并且求解
自定义一个迷宫并且求解。
三、系统定义
四、需求分析
4.1 数据结构需求
数据结构主要涉及三个部分:
1.顶点的数据对象:包含四个1/0整数数据表示该点四个方向的连通状况,数据之间没有联系。
2.迷宫的地图:需要对迷宫的路径进行存储,大小固定,组内元素没有联系,互不影响,没有先后顺序。组内的数据类型为封装好的顶点对象类。
3.迷宫求解中的路径:需要存储经过的路径,元素为封装的顶点对象。元素必须按照顺序排列,先进先出,数据大小无影响。
4.2 操作需求
1.随机模式
2.自定义模式中
五、实现思想(分两部分:随机生成可解迷宫与自定义迷宫)
1.随机生成可解迷宫:
首先,迷宫由n*n个方阵点组成,每个点有控制上下左右,4个方向的墙的属性值,以推倒墙的方式来构建两点间的通路。要是两点间有通路,即要使左边的正方形推倒右墙,右边的正方形推倒左墙,则形成此通路,通过设置点的属性值来保存构成迷宫的点。
利用图的深度优先遍历原则,从起点(0,0)开始,想任意可访问的点进行随机深度遍历,直至所有点都被遍历到为止(此处遍历全部的点是为了使迷宫看起来更加和谐好看,也增加了迷宫的复杂度),深度遍历的路径即为迷宫可行走的通路,当解迷宫时只能在此规定的通路上寻求通路,也就间接的形成了迷宫。
由于图的深度遍历的特点,起点(0,0)可以到达图中任何一个点,此处设置终点为矩阵的最后一个点,确保了起点到终点一定有通路,且通路唯一。将构成迷宫的所有点形成一个可变数组ArrayList,以供解迷宫时使用。
解迷宫时,方向选择按照先右,后下,再左上,并且提供计算两点间在确定方向上是否存在通路的判断方法,如果该点找到了下一个可通行的点,则将该点加入堆栈,如果找不到,则从堆栈中取出一个点,即形成了回路。
2.自定义迷宫
首先根据输入生成m*n个方格,通过鼠标点击事件,生成点击的方格处设置障碍,由此生成迷宫。
解迷宫时,在上述解迷宫的基础上,加入没有通路的判断(即到达不了终点的判断),即堆栈已经为空,但仍要从其中取出点时,表示此迷宫已经没有可以再到达的点,此时反映迷宫无通路,给予用户提示,解迷宫完成。
六、数据结构设计
首先,利用动态数组储存迷宫的所有点类(MazePoint类),随机生成与自定义迷宫的过程中,便是通过设置这些迷宫点来构造迷宫的。
数据结构设计关键在解迷宫时予以体现,此处我利用堆栈的思想,讲解迷宫时经过的点压入堆栈,当在一点找不到可到达的下一点时,便取出堆栈中最顶层的点,将此点设为当前点寻找可到达的点,依次进行此过程,直至到达终点或堆栈中已没有点可以被取出为止。
以为在解迷宫的过程中,寻找过得点被唯一标识,当形成回路再寻找可到达的点时,这些被唯一标识的点不会被二次到达,以此保证迷宫不会出现死循环的状态。