当前位置: 首页 > news >正文

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;
			}
		}
	}	
}

此题有多条路径,上面只展示一条,欢迎有疑问的小伙伴留言~,喜欢就点个关注再走吧!!! 

 

相关文章:

  • Neo4j GDS-11-neo4j GDS 库中相似度算法实现
  • 鸿蒙开发-ArkUi控件使用
  • 重学Redis:Redis常用数据类型+存储结构(源码篇)
  • 5.5 GitHub数据秒级分析核心揭秘:三层提示工程架构设计解析
  • 日志文件爆满_配置使用logback_只保留3天日志文件_每天定时生成一个日志文件---SpringCloud工作笔记206
  • 如何制定有效的风险应对计划
  • C++ std::string_view介绍及性能提升分析
  • android面试情景题详解:android如何处理断网、网络切换或低速网络情况下的业务连续性
  • 关于SENSOR 720P/1080P 静电保护方案
  • Python静态方法和类方法详解
  • 在断网的时候,websocket 一直在CLOSING 状态
  • 如何制定合理的项目预算
  • Docker详细使用
  • Windows 系统如何使用Redis 服务
  • 什么是分布式声波传感
  • 性能炸裂的数据可视化分析工具:DataEase!
  • npm 常用命令及示例和解析
  • 位运算题目:连接连续二进制数字
  • python asyncio 的基本使用
  • HTTP 和 HTTPS 协议的区别及使用场景
  • 中小企业收款难何解?快速认定企业身份并理顺付款责任链条
  • 习近平向加蓬当选总统恩圭马致贺电
  • 今年一季度,上海对东盟进出口总值同比增长7.1%
  • 《大家聊中国式现代化》明天全网推出
  • 大国重器飞天背后,有一位上海航天的“老法师”
  • 接续驰援,中国政府援缅卫生防疫队出发赴缅