题解 | 迷宫问题
迷宫问题
https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
使用深度优先搜索(DFS)
import java.io.*;
import java.util.*;
public class Main {
private static final int MAX_SIZE = 1000;
public static int m;
public static int n;
public static int[][] maze = new int[MAX_SIZE][MAX_SIZE];
public static boolean[][] visited = new boolean[MAX_SIZE][MAX_SIZE];
private static List<Position> result;
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(System.out)) {
StreamTokenizer in = new StreamTokenizer(br);
while (in.nextToken() != StreamTokenizer.TT_EOF) {
m = (int) in.nval;
in.nextToken();
n = (int) in.nval;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
in.nextToken();
maze[i][j] = (int) in.nval;
}
}
List<Position> path = new ArrayList<>();
path.add(new Position(0, 0));
visited[0][0] = true;
result = null;
dfs(0, 0, path);
if (result != null) {
for (Position p : result) {
out.println("(" + p.x + "," + p.y + ")");
}
}
out.flush();
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static final int[][] direction = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
private static void dfs(int i, int j, List<Position> path) {
if (i == m - 1 && j == n - 1) {
result = new ArrayList<>(path);
return;
}
for (int[] d : direction) {
int x = i + d[0];
int y = j + d[1];
if (x < m && x >= 0 && y < n && y >= 0 && maze[x][y] == 0 &&!visited[x][y]) {
visited[x][y] = true;
path.add(new Position(x, y));
dfs(x, y, path);
path.remove(path.size() - 1);
}
}
}
private static class Position {
public int x;
public int y;
public Position(int x, int y) {
this.x = x;
this.y = y;
}
}
}


