[数据结构]递归-迷宫回溯问题

利用递归来解决迷宫问题。

问题描述:有一个由二维数组组成得矩阵,希望从左上角走到左下角,提供一个可行得路线,假设数字1代表墙

解题思路:首先利用二维数组将此地图模拟出来,

// 利用二位数组模拟一个地图
		int[][] map = new int[8][7];
		for (int i = 0; i < 8; i++) {
			map[i][0] = 1;
			map[i][6] = 1;
		}
		for (int i = 0; i < 7; i++) {
			map[0][i] = 1;
			map[7][i] = 1;
		}
		map[4][3] = 1;
		map[4][2] = 1;
		map[4][1] = 1;

		for (int i = 0; i < 8; i++) {
			for (int j = 0; j < 7; j++) {
				System.out.print(map[i][j] + " ");
			}
			System.out.println();
		}

递归程序分析:

首先递归程序会在栈中开辟n多个栈结构,其中引用类型数据是这些结构中唯一共享得数据,所以将二维数组传入递归算法中,这样每次递归就可穷举路径。这里将左上角定为起始路径,右下角定位终止路径。在本程序中1代表墙体,2代表走过得区域,3代表本区域无法走通。其次程序需要制定一个策略,告诉程序应该按照什么规则去探索下一个区域。此方法制定得策略为:下->右->上->左。

public static boolean getWay(int[][] map, int i, int j) {
		if (map[6][5] == 2) {
			return true;
		} else {
			if (map[i][j] == 0) {
				map[i][j] = 2;
				if (getWay(map, i + 1, j)) {
					return true;
				} else if (getWay(map, i, j + 1)) {
					return true;
				} else if (getWay(map, i - 1, j)) {
					return true;
				} else if (getWay(map, i, j - 1)) {
					return true;
				} else {
					map[i][j] = 3;
					return false;
				}
			} else {
				return false;
			}
		}
	}

本程序核心就是对递归得理解。最终程序得输出为:

猜你喜欢

转载自blog.csdn.net/we1less/article/details/106201413