项目要求:
一个网格迷宫由n行n列的单元格组成,每个大院个要么是空地(用0表示),要么是障碍物(用1表示),你的任务是找一条从起点到终点的移动序列,其中只能上下左右移动到相邻单元格。任何时候都不能在有障碍物的单元格中,也不能走到迷宫之外,起点为左上角和终点右下角。
项目功能:
解决迷宫路径查找问题,寻找一条从左上角迷宫入口到右下角迷宫出口的一条有效路径,0代表可走,1代表能走,找到请输出最终的迷宫和路径信息,找不到请输出不存在有效路径。
思路:
1、定义一个迷宫节点类型(MazeNode)的二维数组
2、初始化每个格子中的value值,给二维数组每个格子存放对象。对象的value值只能为0(当前格子可以走)或者1(当前格子不能走)
3、初始化每个格子四个方向(东西南北)是否是可走状态(0可走,1不可走)
4、开始走迷宫。采用栈操作,记录行走的路径,将左上角元素入栈,判断当前栈顶元素的哪个方向可走,将其中一个可走方向进行入栈操作,知道右下角元素停止。栈中保存走过的路径。注意:如果遇到走入死胡同问题,此时需要将是栈顶元素并且栈顶元素的四个方向都不能行走,此时将其出栈,选择新方向再次入栈,直到右下角元素停止。
代码和运行截图:
迷宫的结点类:
package cc;
public class MazeNode {
private int value;//迷宫节点数据0或者1
private int i;//迷宫节点所在的行
private int j;//迷宫节点所在的列
private boolean[] state;//当前节点可走或不可走
/*构造*/
public MazeNode(int value,int i,int j) {
this.value=value;
this.i=i;
this.j=j;
state=new boolean[Constant.SIZE];
}
/*get和set*/
public int getValue() {
return value;
}
public void setValue(int value) {