迷宫递归问题
/**
* 递归迷宫问题
*/
class Maze {
private int[][] maze = new int[8][7];
/**
* 初始化迷宫
*/
public void initMaze() {
// 初始化围墙
for (int i = 0; i < 8; i++) {
maze[i][0] = 1;
maze[i][6] = 1;
}
for (int i = 0; i < 7; i++) {
maze[0][i] = 1;
maze[7][i] = 1;
}
// 初始化障碍物
maze[3][1] = 1;
maze[3][2] = 1;
maze[2][2] = 1;
}
/**
* 遍历迷宫
*/
public void show() {
for (int[] ints : maze) {
System.out.println(Arrays.toString(ints));
}
}
/**
* 递归寻找路径:数值说明,1为墙壁,2为走过通的点,3为走过不通的点
* @param i 数组行
* @param j 数组列
* @return
*/
public Boolean getPath(int i, int j) {
// 如果终点为 2,则已经到达目的地
if (maze[6][5] == 2) {
return true;
} else {
// 如果为 0 则当前路径可以走
if (maze[i][j] == 0) {
// 把这个点标记为 2,继续走
maze[i][j] = 2;
// 指定行走的策略,下右左上
if (getPath(i + 1, j)) {
return true;
} else if (getPath(i, j + 1)) {
return true;
} else if (getPath(i, j - 1)) {
return true;
} else if (getPath(i - 1, j)) {
return true;
} else {
// 策略都走了,证明这个点不通,把点修改为3,返回false
maze[i][j] = 3;
return false;
}
} else {
// 数值为1,3都不可走,返回 false
return false;
}
}
}
}