使用二位数据进行描述迷宫,在二维数组中,0表示该点还没有走过,1表示为墙,2表示路可以走(也为最终的路线),3表示该点已经走过但是走不通
package Debug;
import java.util.Scanner;
/**
* ClassName: Debug01
* Package: Debug
* Description:
*
* @Auther: hengc
* @Create: 2022/12/24 - 21:02
* @Version: v1.0
*/
public class Debug01 {
public static void main(String[] args) {
//创建一个10*10的迷宫
int[][] map = new int[10][10];
//然后开始设置墙体(上下两墙)
for (int i = 0; i < map.length; i++) {
map[i][0] = 1;
map[i][9] = 1;
}
//(左右两墙)
for (int j = 0; j < map[0].length; j++) {
map[0][j] = 1;
map[9][j] = 1;
}
//设置挡板
map[3][1] = 1;
map[3][2] = 1;
map[3][3] = 1;
//输出地图
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
//进行寻址
System.out.println("************************");
setWay(map, 1, 1);
System.out.println("************************");
//再次输出地图
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
}
/**
* 使用递归开始给小球找路 下 右 上 左
*
* @param map 地图
* @param i
* @param j
* @return 终点位置为map[8][8]
*/
public static boolean setWay(int[][] map, int i, int j) {
if (map[8][8] == 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; //如果上下左右都走不通,改为3
return false;
}
} else {//表明该点不为0,可能是1 2 3
return false;
}
}
}
}
运行结果展示:
