package com.bei.Demo01_recursion;
/**
* @Auther: HoneySky
* @Date: 2020/12/20 14:41
*/
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();
}
System.out.println("----------------------------");
setWay(map,1,1);
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表示从地图的那个位置开始出发(1,1)
//2.如果能到map[6][5]位置,则说明能走得通
//4约定:当map[i][j]=0时 表示没找过 1 表示墙 2表示通路可以走 3表示该点已经走过 但是走不通
//5.策略:下-右-上-左,如果该点走不通 在回溯
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;
}
}
}
}
递归-迷宫问题
最新推荐文章于 2024-10-05 15:32:05 发布