递归解决迷宫问题(java完整代码)

整体思路:

1.创建一个10*10的二维数组迷宫。

当前迷宫中二维数组的值:0代表从未走过1代表障碍物,2代表已经走过,该点只能走一次,不能返回重走,3代表死路(上下左右试探的时候,遇到障碍物或者其他死路点或者已经走过的点,判断该点为死路)。

着重理解下 值为2的时候只能走一次

        1)理解上,值为2,肯定要经过最终下,右,上,左方向进行了下一步的试探。所以路径就算回来了也不用再走了。因为能走通,第一次走的时候已经通了。

        2)如果能再走,如果这条路走到最后又回来了,那不就导致死循环了。

2.设置障碍物

3.开始递归尝试路线。按照一个设定的下,右,上,左方向递归测试路线,直到找到最终路线。

下面是代码。

public static void main(String[] args) {
		//创建一个10*10的迷宫
		int[][] mazeArr = new int[10][10];
		/*
		 * 开始给迷宫设置障碍物
		 */
		for (int i = 0; i < 10; i++) {
			mazeArr[0][i] = 1;
			mazeArr[9][i] = 1;
		}
		for (int i = 0; i < 10; i++) {
			mazeArr[i][0] = 1;
			mazeArr[i][9] = 1;
		}
		mazeArr[4][1] = 1;
		mazeArr[4][2] = 1;
		mazeArr[4][3] = 1;
		mazeArr[3][3] = 1;
		mazeArr[2][3] = 1;
		mazeArr[2][2] = 1;
		
		/*
		 *障碍物设置结束
		 */
		System.out.println("迷宫初始位置");
		show(mazeArr);
		tryWay(mazeArr,1,1);
		System.out.println("走过之后--------------------------");
		show(mazeArr);
		System.out.println("打印的2就是走过的路线,3是死胡同");
	}
	//打印迷宫属性
	public static void show(int[][] mazeArr){
		for (int i = 0; i < mazeArr.length; i++) {
			for (int j = 0; j < mazeArr[i].length; j++) {
				System.out.print(mazeArr[i][j]+"  ");
			}
			System.out.println();
		}
	}
	//尝试路线方法
	public static boolean tryWay(int[][] mazeArr,int i,int j){
		if(mazeArr[8][8] == 2){//如果找到终点。直接返回true。
			return true;
		}
		if(mazeArr[i][j] == 0){//只有当这个点从未走过时才走。注意看else
			mazeArr[i][j] = 2; //假定该点可以走通!
			//开始下,右,上,左 四次递归尝试。
			if(tryWay(mazeArr, i+1, j)){
				return true;
			}else if(tryWay(mazeArr, i, j+1)){
				return true;
			}else if(tryWay(mazeArr, i-1 , j)){
				return true;
			}else if(tryWay(mazeArr, i, j-1)){
				return true;
			}else{//上面4次尝试 下,右,上,左都走不通了,说明死路。直接设置为3。
				mazeArr[i][j] = 3;
				return false;
			}
		}else{//1,障碍物,3,死胡同 2,从已经走过,这个点已经被走过了,所以设定不让再次走了。
			return false;
		}
	}

}

下面是输出结果

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欣辰守护者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值