递归-迷宫问题(java实现)
使用递归回溯给小球找路
初始化迷宫,使用1,表示迷宫边界墙
//创建二维数组模拟迷宫
int [][] map=new int[8][7];
//使用1,表示迷宫边界墙,上下置为1
for(int i=0;i<7;i++) {
map[0][i]=1;
map[7][i]=1;
}
//左右置为1
for(int i=0;i<8;i++) {
map[i][0]=1;
map[i][6]=1;
}
//设置挡板,1表示
map[3][1]=1;
map[3][2]=1;
核心算法,约定走路策划,:先下->右->上->左,若走不通·,再回溯。
map[i][j]=0表示未走过,=1表示已经走过不能走,2表示通路可以走,3表示该点已经走过,但是不通。
//使用递归回溯给小球找路*******************************************
/*1. map表示地图
*2. i j从那个位置开始找,[1][1],若小球到达【6】【5】说明通路
*3. 规则:map[i][j]=0表示未走过,=1表示已经走过不能走,2表示通路可以走,3表示该点已经走过,但是不通。
*4. 如果找到通路,就返回true,否则false
*5.约定走路策划,:先下->右->上->左,若走不通·,再回溯
*/
public static boolean setWay(int[][] map,int i,int j) {
if(map[6][5]==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 {
//说明该点死路,置为3
map[i][j]=3;
return false;
}
}else { //如果点不等于0,可能1墙,2走过,3死路
return false;
}
}
}