1.map表示地图
2.i,j表示从地图的哪个位置开始出发(1,1)
3.如果小球能到mao[6][5]位置,则说明通路找到
4.约定:当map[i][j]为0表示该点没有走过,为1时就表示墙,为2时就表示通路可以走,为时就表示已经走过,但是走不通
5.在走迷宫时,需要确定一个策略下->右->上->左,如果该点走不通,再回溯
package com.wrx.dataStructures.recursion;
/**
* @auther Len901
* @time 2022-10-02-8:10
*/
/*
说明:
1.map表示地图
2.i,j表示从地图的哪个位置开始出发(1,1)
3.如果小球能到mao[6][5]位置,则说明通路找到
4.约定:当map[i][j]为0表示该点没有走过,为1时就表示墙,为2时就表示通路可以走,为时就表示已经走过,但是走不通
5.在走迷宫时,需要确定一个策略下->右->上->左,如果该点走不通,再回溯
*/
public class Maze {
public static void main(String[] args) {
//先创建一个二维数组,模拟迷宫
int [][] map=new int[8][7];
//使用1来表示墙,上下左右边框全部置为1
for (int i=0;i<7;i++){
map[0][i]=1;
map[7][i]=1;
}
for (int i=0;i<8;i++){
map[i][0]=1;
map[i][6]=1;
}
map[3][1]=1;
map[3][2]=1;
//输出地图
System.out.println("地图的情况");
for (int i=0;i<8;i++){
for (int j=0;j<7;j++){
System.out.print(map[i][j]+" ");
}
System.out.println();
}
//使用递归算法给小球找路
setWay(map,1,1);
//输出新的地图
System.out.println("输出新的地图");
for (int i=0;i<8;i++){
for (int j=0;j<7;j++){
System.out.print(map[i][j]+" ");
}
System.out.println();
}
}
//使用递归回溯来给小球找路
public static boolean setWay(int[][] map,int i,int j) {//如果找到通路,就返回true,否则就返回false
if(map[6][5]==2){//通路已经找到ok
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 {//如果map[i][j]!=0,可能是1,2。3
return false;
}
}
}
}