题解 | #迷宫问题#
迷宫问题
https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
菜鸟思路,可能更易理解。
1、首先这题我们先不考虑输出,先找出这唯一的一条条路径吧
import java.util.*; public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
//数据的大小
int m = in.nextInt();
int n = in.nextInt();
int[][] migong = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
migong[i][j] = in.nextInt();
}
}
findMinRes(migong, 0, 0);
//输出结果........
}
}
// 0代表可走,1代表墙壁,2代表可以到达终点的格子
public static boolean findMinRes(int[][] migong, int x, int y) {
//如果是左下角那么我们可以结束了
if (x == migong.length - 1 && y == migong[0].length - 1) {
return true;
}
//首先假设这条路可以走
migong[x][y] = 2;
//下 :这里有几个判断,1是判断下面的这个格子是不是到迷宫边缘了,2是判断下面的这个格子是不是可以走,3是判断如果走这个格子是不是能到终点
if (x + 1 < migong.length && migong[x + 1][y] == 0 &&
findMinRes(migong, x + 1, y)) {
//如果上面三个判断都能满足,那返回true表示这个格子可以走到终点
return true;
}
//右
if (y + 1 < migong[0].length && migong[x][y + 1] == 0 &&
findMinRes(migong, x, y + 1)) {
return true;
}
//上:同上
if (x - 1 >= 0 && migong[x - 1][y] == 0 && findMinRes(migong, x - 1, y)) {
return true;
}
//左:同上
if (y - 1 >= 0 && migong[x][y - 1] == 0 && findMinRes(migong, x, y - 1 )) {
return true;
}
//这条路不能走,也就等同于墙
migong[x][y] = 1;
return false;
}
}
2、用自己感觉合适的方法返回这个二维数组中,数值为2的就行了
略

