public class MiGong {
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;
}
//设置挡板
map[3][1] = 1;
map[3][2] = 1;
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.println();
}
System.out.println("----------------------");
//使用递归回溯找路
boolean b = setWay(map, 1, 1);
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.println();
}
}
//i,j表示从那个位置找,找到路就返回true,出发点为1,1 ,如果到6,5 则表示通路找到
//当地图的i,j等于0时,表示该点没有走过,1为墙,2则表示通路可以走,3表示已经走过,但是走不通
//在走迷宫时,需要确定一个策略 ->下 > 右 > 上 > 左 ,如果该点走不通再回溯
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 {
//说明该点走不通,是死路
map[i][j] = 3;
return false;
}
}else {
return false;
}
}
}
}
一个简单的走迷宫算法(递归)
最新推荐文章于 2022-10-12 20:11:45 发布