- 递归的定义:递归就是不断的调用自己的方法,帮助解决麻烦的代码问题,最后提高代码的简洁性、
-
递归需要遵守的规则:
- 迷宫回溯问题:
- 迷宫回溯问题的代码实现:
package 递归;
public class 迷宫回溯问题 {
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;
}
//左右全部置为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;
System.out.println("输出地图的情况");
for (int i = 0; i <8 ; i++) {
for (int j = 0; j <7 ; j++) {
System.out.print(map[i][j]+"\t");
}
System.out.println();
}
}
//使用递归来给小球找路
/*
* 1:map表示地图
* i,j表示从地图的那个位置开始出发
* 如果小球能到map【6】【5】的位置,说明找到
* 约定:当map【i】【j】为0时,表示该点没有走,1表示墙,2表示可以走,3表示该点已经走过,但是走不通
* 当走迷宫时,需要确定一个策略,下》右》上》左,如果该点走不通,在回溯
*如果找到通路,返回true,否则返回false
* */
public static boolean setWay(int[][] map,int i,int j){//通路已经找到
if (map[i][j]==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;
return false;
}
}else {
//如果map【i】【j】为!0时,可能是1,2,3
return false;
}
}
}
}