class Maze
package DataStructures.recursion;
/**
* @author coffee
* @date 2021-03-31 14:45
*/
public class Maze {
public static void main(String[] args) {
int[][] ints = new int[8][7];
//使用1表示墙,上下全部设置为1
for (int i = 0; i < 7; i++) {
ints[0][i] = 1;
ints[7][i] = 1;
}
//左右全部设置为1
for (int i = 0; i < 7; i++) {
ints[i][0] = 1;
ints[i][6] = 1;
}
//挡板
ints[3][1] = 1;
ints[3][2] = 1;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
System.out.print(ints[i][j] + " ");
}
System.out.println();
}
System.out.println();
setWay(ints,1,1);
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
System.out.print(ints[i][j] + " ");
}
System.out.println();
}
}
/**
* 使用递归回溯来给小球找路
* 0为没有走过,1表示墙,2表示通路,3表示走过并不通
* 下->右->上->左,走不通再回溯
* @param map 地图
* @param i 出发的横坐标
* @param j 出发的纵坐标
* @return 如果小球到map[6][5]时,返回true
*/
public static boolean setWay(int[][] map,int i,int j){
if (map[6][5] == 2) {//当终点为2时,表示找到终点
return true;
} else{
if (map[i][j] == 0){//如果当前点没有走过,为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 {//说明该点不通为3
map[i][j] = 3;
return false;
}
}else {//不为0为1,2,3,不能走
return false;
}
}
}
}