二维数组:map[8][7]构成围墙;
数字1代表围墙或者障碍物;
数字0代表空白处或者可通行处;
从array[1][1]出发,到达array[6][5]即为达到出口;
初始迷宫图形如下:
实现代码如下:
public class MiGong {
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;
}
//设置挡板
map[3][1] = 1;
map[3][2] = 1;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
//找路 seteWay(map, 1, 1);
seteWay1(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();
}
}
//使用递归回溯来给小球找路
/*
* @Author 小涛
* @Description lenovo
* @Param [表示地图, 从哪个位置开始找 ]
* @return boolean 找到通路返回true
* 如果道道map[6][5] 则说明通路找到
* 约定:1表示墙 0表示没有走过,2表示通路 3表示该位置已经走过,但走不通
* 在走迷宫时确定一个策略,下-> 右->上->左,如果该点走不通 再回溯
*/
public static boolean seteWay(int[][] map, int i, int j) {
if (map[6][5] == 2) { //通路已经找到 ok
return true;
} else {
if (map[i][j] == 0) {//当前点没有走过
//按照策略:下-> 右->上->左
map[i][j] = 2; //假定可以走通
if (seteWay(map, i + 1, j)) { //向下走
return true;
} else if (seteWay(map, i, j + 1)) { //向右走
return true;
} else if (seteWay(map, i - 1, j)) { //向上走
return true;
} else if (seteWay(map, i, j - 1)) { //向左走
return true;
} else {
//说明该点是走不通的 是死路 //假定不成立
map[i][j] = 3;
return false;
}
} else { //如果map[i][j]不为0.map[i][j] 可能为 1 2 3
return false;
}
}
}
//修改策略 上 右 下 左
public static boolean seteWay1(int[][] map, int i, int j) {
if (map[6][5] == 2) { //通路已经找到 ok
return true;
} else {
if (map[i][j] == 0) {//当前点没有走过
//按照策略:下-> 右->上->左
map[i][j] = 2; //假定可以走通
if (seteWay1(map, i - 1, j)) { //向上走
return true;
} else if (seteWay1(map, i, j + 1)) { //向右走
return true;
} else if (seteWay1(map, i + 1, j)) { //向下走
return true;
} else if (seteWay1(map, i, j - 1)) { //向左走
return true;
} else {
//说明该点是走不通的 是死路 //假定不成立
map[i][j] = 3;
return false;
}
} else { //如果map[i][j]不为0.map[i][j] 可能为 1 2 3
return false;
}
}
}
}
结果所示(该过程使用上->右->下->左策略输出结果):