题解 | #迷宫问题#
迷宫问题
https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
import java.util.LinkedList;
import java.util.List;
import java.util.ArrayList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int a = 0;
int b = 0;
int[][] maze = null;
while (in.hasNextInt()) { // 注意 while 处理多个 case
a = in.nextInt();
b = in.nextInt();
maze = new int[a][b];
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
maze[i][j] = in.nextInt();
}
}
}
Stack<Pos> path = new Stack<Pos>();
dfs(maze, path, a, b);
}
private static void dfs(int[][] maze, Stack<Pos> path, int a, int b) {
path.push(new Pos(0, 0, null));
maze[0][0] = 2;// 标记已读
Pos pos = null;
while (true) {
pos = path.pop();
int r = pos.r;
int c = pos.c;
if (r >= a - 1 && c >= b - 1) break;
else {
if (r + 1 < a && maze[r + 1][c] == 0) { // go down
maze[r + 1][c] = 2;
path.push(new Pos(r + 1, c, pos));
}
if (c + 1 < b && maze[r][c + 1] == 0) { // go right
maze[r][c + 1] = 2;
path.push(new Pos(r, c + 1, pos));
}
if (r - 1 >= 0 && maze[r - 1][c] == 0) { // go up
maze[r - 1][c] = 2;
path.push(new Pos(r - 1, c, pos));
}
if (c - 1 >= 0 && maze[r][c - 1] == 0) { // go left
maze[r][c - 1] = 2;
path.push(new Pos(r, c - 1, pos));
}
}
}
print(pos);
}
public static void print(Pos pos) {
if (pos != null) {
print(pos.father);
System.out.println(pos.getString());
}
}
}
class Pos {
int r;
int c;
Pos father;
Pos(int r, int c, Pos value) {
this.r = r;
this.c = c;
this.father = value;
}
public String getString() {
return "(" + r + "," + c + ")";
}
}
dfs , depth first search 深度优先遍历。深度理解
OPPO公司福利 1202人发布