迷宫问题
迷宫问题

图片为一个八行七列的迷宫,要求是圆点从(1,1)开始走迷宫,到(6,5)视为走出迷宫
解决方法
地图初始化
先绘制出迷宫图,用二维数组来表示
int[][] map = new int[8][7];
//行置为一
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 < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
System.out.print(map[i][j] + " ");
}
System.out.print("\n");
}
此时的地图样式为
找到迷宫路径
接下来使用递归的思想来解决迷宫问题
- findway方法是用来找到出迷宫的路径的
- 如果找到路径就返回true,找不到则返回false
- (i,j)是用来表示圆点的位置的
- map数组用来表示迷宫
- 在代码块中,0表示可以通行,1表示障碍物,2表示该路可以通行并且已经走过,3表示此路走过但是是一个死路
- 代码的结束条件是map[6][5] = 2,表明圆点已经走到过终点
- 圆点的走路策略先定为 下 -> 右 ->上 -> 左
代码的实现如下:
public boolean findway(int[][] map, int i, int j) {
if (map[6][5] == 2) { //说明已经到达终点
return true;
} else {
if (map[i][j] == 0) {
map[i][j] = 2; //先假定可以走通
if (findway(map, i + 1, j)) {
return true;
} else if (findway(map, i, j + 1)) {
return true;
} else if (findway(map, i - 1, j)) {
return true;
} else if (findway(map, i, j - 1)) {
return true;
} else {
map[i][j] = 3; //下右上左都走不通表明这是一个死路,置为3
return false;
}
}else{ //map[i][j]= 1,2,3
return false;
}
}
}
代码执行
接下来需要在main中调用T类中的findway方法来找到路径
T t1 = new T(); //T类是用来寻找路径的
t1.findway(map,1,1);
System.out.println("===找到的路径如下===");
//遍历输出数组
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
System.out.print(map[i][j] + " ");
}
System.out.print("\n");
}
代码执行完成后找到的路径为
当然也可以改变地图的样式或者找路的策略,此时找到的路径会随之变化,或者无法找到路径

浙公网安备 33010602011771号