大家有更好的想法可以与作者进行交流
如果代码存在问题恳请大家在评论区中指出
package MazeProblem;
import java.util.Arrays;
public class MazeProblem {
public static void main(String[] args) {
//利用二维数组构建迷宫
//用1表示墙
int[][] map = new int[8][7];
for (int i = 0; i < 7; i++) {
map[0][i] = 1;
map[7][i] = 1;
}
for (int j = 1; j < 7; j++) {
map[j][0] = 1;
map[j][6] = 1;
}
map[3][1] = 1;
map[3][2] = 1;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
System.out.println("--------");
getWay(map,1,1);
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
}
//使用递归方法走出迷宫
/*
迷宫的出口为map[6][5],即递归的出口
map[i][j]=1表示墙
map[i][j]=2表示可以走
map[i][j]=3表示已经走过但走不通
方向的优先级:下-右-上-左
*/
public static boolean getWay(int[][] map, int i, int j) {
if (map[6][5] == 2) { //已经走到终点
return true;
} else {
if (map[i][j] == 0) {
map[i][j] = 2;
if (getWay(map, i + 1, j)) {
return true;
} else if (getWay(map, i, j + 1)) {
return true;
} else if (getWay(map, i - 1, j)) {
return true;
} else if (getWay(map, i, j - 1)) {
return true;
} else {
map[i][j]=3;
return false;
}
}else {
return false;
}
}
}
}
实现效果:
- 搭建的迷宫初始状态
- 调用递归函数后迷宫的状态(2表示所走过的路线)
3.如果迷宫是条死路,则效果如下