抄袭大佬写的:

import java.util.*; // 题目已经提示了 【迷宫只有一条通道】,则直接使用 DFS 找路径就行了,如不有多条路径找最短考虑使用 BFS public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextInt()) { // 注意 while 处理多个 case int n = in.nextInt(); int m = in.nextInt(); // 构造迷宫 int[][] maze = new int[n][m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { maze[i][j] = in.nextInt(); } }

        // 路径存储的数组
        List<Pos> path = new ArrayList<>();
        // DFS 搜索路径
        dfs(maze, 0, 0, path);
        // 输出
        for (Pos p : path) {
            System.out.println("(" + p.x + "," + p.y + ")");
        }
    }
}

// 返回值 标记是否找到可通行的路劲
public static boolean dfs(int[][] map, int x, int y, List<Pos> path) {
    // 添加路径并标记已走
    path.add(new Pos(x, y));
    map[x][y] = 1;
    // 结束标志
    if (x == map.length - 1 && y == map[0].length - 1) {
        return true;
    }
    // 向下能走时
    if (x + 1 < map.length && map[x + 1][y] == 0) {
        if (dfs(map, x + 1, y, path)) {
            return true;
        }
    }
    // 向右能走时
    if (y + 1 < map[0].length && map[x][y + 1] == 0) {
        if (dfs(map, x, y + 1, path)) {
            return true;
        }
    }
    // 向上能走时
    if (x - 1 > -1 && map[x - 1][y] == 0) {
        if (dfs(map, x - 1, y, path)) {
            return true;
        }
    }
    // 向左能走时
    if (y - 1 > -1 && map[x][y - 1] == 0) {
        if (dfs(map, x, y - 1, path)) {
            return true;
        }
    }
    // 回溯
    path.remove(path.size() - 1);
    map[x][y] = 0;
    return false;
}

// 简单的位置类
public static class Pos {
    int x;
    int y;

    public Pos(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

}