Java老鼠迷宫(递归)---案例来自韩顺平老师讲Java
题目:
粉色圈圈是启动,红色方框是阻挡,蓝色五角星是出口,走到出口,老鼠winner
代码:
public class test6
{
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;
map[2][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();
}
System.out.println();
System.out.println("老鼠结果如下:=========================================");
// 接函数收返回的值
boolean res = findway(map,1,1);
if(res)
{
System.out.println("老鼠逃出");
}
else
{
System.out.println("老鼠gg");
}
System.out.println();
// 打印现在的地图
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、findway 方法就是专门来找出迷宫的路径
// 2、如果找到,就返回true,否则返回false
// 3、map 就是二维数组,即表示迷宫
// 4、i , j 就是老鼠的位置,初始化的位置为(1,1)
// 5、因为我们是递归的找路,所以我先规定 map数组的各个值的含义
// 0-> 表示可以走的路 1-> 表示障碍物不能走的路 2-> 表示可以走(此路走过是通路) 3-> 表示走过,但是走不通
// 6、当map[6][5] = 2, 就说明找到通路,就可以结束,否则就继续找
// 7、先确定老鼠找路策略: 下->右->上->左
public static boolean findway(int[][] map , int i, int j)
{
// 如果老鼠走到了map[6][5] = 2 说明找到出路
if(map[6][5] == 2)
{
return true; //返回对
}
else
{
// 如果这个点是0表示可以走
if(map[i][j] == 0)
{
//假如这个路是同的先暂时标记 -> 2
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 // 走不通标记3
{
map[i][j] = 3;
return false;
}
}
else // 说明这个点表示 1 2(走过的路不能重复标记) 3 不通 返回false
{
return false;
}
}
}
}
此题有多条路径,上面只展示一条,欢迎有疑问的小伙伴留言~,喜欢就点个关注再走吧!!!