题解 | #迷宫问题#
迷宫问题
https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
// 存储所有的潜在路径,本题目前只有1个路径
static ArrayList<LinkedList<int[]>> result = new ArrayList<>();
static LinkedList<int[]> paths = new LinkedList<>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int rowSize = sc.nextInt();
int colSize = sc.nextInt();
int[][] map = new int[rowSize][colSize];
for (int i = 0; i < rowSize; i++) {
for (int j = 0; j < colSize; j++) {
map[i][j] = sc.nextInt();
}
}
helper(map, 0, 0);
// 默认只有一个解法,result取第一个即可
for (int[] path : result.get(0)) {
System.out.println("(" + path[0] + "," + path[1] + ")");
}
}
private static void helper(int[][] map, int x, int y) {
int rowSize = map.length;
int colSize = map[0].length;
// 越界 or 碰壁 return
if (x < 0 || x >= rowSize || y < 0 || y >= colSize || map[x][y] == 1) {
return;
}
if (x == rowSize - 1 && y == colSize - 1) {
// 注意加上末尾节点
paths.add(new int[]{x, y});
// 注意要生成一个新的path list,否则回溯会把这个清空
result.add(new LinkedList<>(paths));
} else {
// 污染思想,上下左右
map[x][y] = 1;
paths.add(new int[]{x, y});
helper(map, x + 1, y);
helper(map, x - 1, y);
helper(map, x, y + 1);
helper(map, x, y - 1);
// 回溯
map[x][y] = 0;
paths.removeLast();
}
}
}
#华为机考##华为#

查看18道真题和解析