题解 | #迷宫问题#
迷宫问题
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) { //如果是左下角那么我们可以结束了2、用自己感觉合适的方法返回这个二维数组中,数值为2的就行了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; } }
略