题解 | 迷宫寻路
迷宫寻路
https://www.nowcoder.com/practice/0c8930e517444d04b426e9703d483ed4
import java.util.*;
/**
* @author: wangbo
* @date: 2026/3/28 17:05
*/
public class Main {
public static String[][] grip = new String[1][1];
public static Boolean[][] flag = new Boolean[1][1];
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
String[] num = s.split(" ");
int n = Integer.parseInt(num[0]);
int m = Integer.parseInt(num[1]);
grip = new String[n][m];
flag = new Boolean[n][m];
//建图
for (int i = 0; i < n; i++) {
String line = scanner.nextLine();
char[] charArray = line.toCharArray();
for (int j = 0; j < m; j++) {
grip[i][j] = String.valueOf(charArray[j]);
}
}
//寻路径
boolean res = reached(0, 0, n - 1, m - 1);
System.out.println(res ? "Yes" : "No");
}
public static boolean reached(Integer i, Integer j, Integer n, Integer m) {
if (i.equals(n) && j.equals(m)) {
return true;
}
if (i < 0 || j < 0 || i > n || j > m) {
return false;
}
//更新是否走过的标志
Boolean arrived = flag[i][j];
if (arrived != null) {
return false;
}
flag[i][j] = true;
if (grip[i][j].equals("#")) {
return false;
}
return reached(i - 1, j, n, m)
|| reached(i + 1, j, n, m)
|| reached(i, j - 1, n, m)
|| reached(i, j + 1, n, m);
}
}

查看20道真题和解析