package recursion;
/**
* 迷宫采用递归做法
*
* @author JustGeeker
*
*/
public class Maze {
public static void main(String[] args) {
Maze maze = new Maze();
int[][] arr = maze.getMap(8, 8);
maze.showMap(arr);
System.out.println("===================");
maze.setWay(arr, 1, 1);
maze.showMap(arr);
}
/**
* 0 表示没走过,1表示围墙,2表示可用走通,3表示可用走过但是是死路
*
* @param len数组长度
* @param wid数组宽度
* @return
*/
public int[][] getMap(int len, int wid) {
int[][] arr = new int[len][wid];
for (int i = 0; i < len; i++) {
arr[i][0] = 1;
arr[i][wid - 1] = 1;
}
for (int i = 0; i < wid; i++) {
arr[0][i] = 1;
arr[len - 1][i] = 1;
}
arr[2][1] = 1;
arr[2][2] = 1;
arr[3][2] = 1;
arr[5][6] = 1;
arr[5][5] = 1;
arr[5][4] = 1;
arr[5][3] = 1;
return arr;
}
public void showMap(int[][] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
/**
*
* @param map地图数组
* @param i开始的横坐标
* @param 开始的纵坐标
* @return
*/
public boolean setWay(int[][] map, int i, int j) {
if (map[6][6] == 2) {
return true;
} else {
if (map[i][j] == 0) {// 这个点没走过
map[i][j] = 2;
if (setWay(map, i + 1, j)) {// 向下走
return true;
} else if (setWay(map, i, j + 1)) {// 向右
return true;
} else if (setWay(map, i - 1, j)) {// 向上
return true;
} else if (setWay(map, i, j - 1)) {// 向左
return true;
} else {
map[i][j] = 3;
return false;
}
} else {
return false;// 这个点可能是1,2,3都不能过
}
}
}
}
代码运行结果
来源:CSDN
作者:小小火柴人
链接:https://blog.csdn.net/QQbq12456/article/details/104286429