简述java递归实现小老鼠出迷宫

目录

1.迷宫地图

代码实现:

地图效果:

 2.走迷宫

代码实现:

代码效果:


1.迷宫地图

我们使用二维数组打印迷宫地图,1表示障碍物,0表示没有障碍物。

代码实现:

int map[][] = new int[8][7];
		for(int i = 0 ; i< 7; i++){ 
				map[0][i]=1;//1表示障碍物
				map[7][i]=1;
		}
		//打印第一列和最后一列的障碍物
		for(int i = 0 ; i< 8 ; i++){
			map[i][0] = 1;
			map[i][6] = 1;

		}
		map[3][2]=1;//具体的障碍点设置
		map[3][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.println();//每输出一行后就换行
		}

地图效果:

扫描二维码关注公众号,回复: 15603222 查看本文章

 2.走迷宫

我们假设:0表示没有障碍物   1表示障碍物  2 表示假设可以走  3 表示可以走但是走不通。

如果找到出路 返回true 没有找到 返回false

思路:创建一个方法findway用于找路,我们使用递归时,把递归结束条件写在程序前面,如果小老鼠在数组出口位置时,该数组元素等于2,则返回true。找路完成,其他在没有障碍物的情况下我们假设该位置为2,然后使用递归去上下左右去走,能走就返回true,如果这条路能走但是走不通赋值为3并且就返回false。

代码实现:

//0表示没有障碍物   1表示障碍物  2 表示假设可以走  3 表示可以走但是走不通
//如果找到出路 返回true 没有找到 返回false
class M{
	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;//0表示没有障碍物可以走
				if(findway(map , i+1 ,j)){//下
					return true;
				}else if(findway(map , i ,j+1)){//右
					return true;//下
				}else if(findway(map , i-1 ,j-1)){//上
					return true;
				}else if(findway(map , i , j-1)){//左
					return true;
				}else{
					map[i][j]=3;//3表示能走但是走不通
					return false;
				}
			}else{
				return false;
			}

		}

	}
}


代码效果:

 我们估计把小老鼠初始位置周边堵死看会出现什么情况,不出意外应该会生成3。小老鼠走迷宫用到了一点点的回溯。

猜你喜欢

转载自blog.csdn.net/weixin_64131583/article/details/123107202
今日推荐