递归——迷宫
作者:互联网
递归
迷宫回溯
如下是一个建议迷宫,编写程序使得显示从开始位置到终点的一条路径
(问题详解与思路均在代码题解中)
代码实现
package recursion;
public class labyrinth {
public static void main(String[] args) {
//先创建一个二维数组,模拟迷宫
//创建地图
int[][]map=new int[8][7];
//使用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;
}
//设置挡板,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();
}
for (int i=0;i<3;i++)
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();
}
}
/*根据迷宫的玩法
我们可以给出以下规定
1.map是我们定义的地图
2.递归参数i,j表示我们在进行下一步时触发的位置
3.约定:当map[i][j]为0表示该点没有走过,为1表示该点为墙,为2表示通路可走,为3表示已经走过但是不通
4.在走迷宫时,确定一个模式,每次寻路按照下->右->上->左,如果走不通就回溯
*/
public static boolean setWay(int [][]map,int i,int j) {
if (map[6][5] == 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 {
//四个方向都不通
map[i][j] = 3;//按照约定此处置为3
return false;
}
} else {//如果map[i][j]!=0,可能是1,2,3
return false;
}
}
}
}
标签:map,return,递归,int,迷宫,System,else,setWay 来源: https://blog.csdn.net/LateNight_LL/article/details/121067439