栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

整体思路:

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

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

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

}

下面是输出结果

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/885292.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号