题解 | 迷宫问题
迷宫问题
https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
static List<List<String>> res = new ArrayList<>();
static List<String> path = new ArrayList<>();
static int[][] direct = new int[][] {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int h = sc.nextInt();//row
int w = sc.nextInt();//col
int[][] grid = new int[h][w];
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
grid[i][j] = sc.nextInt();
}
}
boolean[][] visited = new boolean[h][w];
path.add("(0,0)");
dfs(0, 0, grid, visited);
if (res.size() > 0) {
for (String string : res.get(0)) {
System.out.println(string);
}
}
}
private static void dfs(int i, int j, int[][] grid, boolean[][] visited) {
if (i == grid.length - 1 && j == grid[0].length - 1) {
res.add(new ArrayList<>(path));
return;
}
for (int k = 0; k < direct.length; k++) {
int newi = i + direct[k][0];
int newj = j + direct[k][1];
//下标越界 跳过
if (newi < 0 || newj < 0 || newi >= grid.length || newj >= grid[0].length) {
continue;
}
//遇到障碍物 跳过
if (grid[newi][newj] == 1) {
continue;
}
//访问过了 跳过
if (visited[newi][newj]) {
continue;
}
visited[newi][newj] = true;
path.add("(" + newi + "," + newj + ")");
dfs(newi, newj, grid, visited);
path.remove(path.size() - 1);
}
}
}

查看12道真题和解析