package com.itcast.datastructure.recursion;
public class labyrinth {
public static void main(String[] args) {
//生成地图(二维数组)
int[][] map=new int[7][8];
for (int i=0;i<8;i++){
map[0][i]=1;
map[6][i]=1;
}
for (int i=0;i<7;i++){
map[i][0]=1;
map[i][7]=1;
}
map[3][1]=1;
map[3][2]=1;
map[2][2]=1;
showMap(map);
System.out.println("......................");
//探路
setWay(map,1,1);
showMap(map);
}
//在地图(二维数组)上探路, 约定 :1表示墙、2表示走过(可能不通)、3走过(但是不通)
public static boolean setWay(int[][] map,int i,int j){
//判断是否找到出口
if(map[5][6]==2){
//找到出口
return true;
}else {
//还没找到出口,开始探路
if (map[i][j] == 0) {
//这条路没有走过,设为2
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 {//1,2,3
//这条路要么是墙,要么走过,要么不通,得返回
return false;
}
}
}
//查看地图(二维数组)
public static void showMap(int[][] map){
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();
}
}
}
01-15
640