1926 迷宫中离入口最近的出口

565 阅读1分钟

这道题考察的是bfs,即最短路径找到终点,这是我AC代码,但是时间较长,虽然能过

class Solution {
    int[] dx = {0, 1, 0, -1};
    int[] dy = {-1, 0, 1, 0};
    int ans = Integer.MAX_VALUE;
    boolean[][] f;
    public int nearestExit(char[][] maze, int[] entrance) {
        int m = maze.length;
        int n = maze[0].length;
        f = new boolean[m + 10][n + 10];
        Queue<Integer> q = new LinkedList<>();
        q.add(entrance[0]);
        q.add(entrance[1]);
        q.add(0);
        f[entrance[0]][entrance[1]] = true;
        while(!q.isEmpty()) {
            int x = q.poll();
            int y = q.poll();
            int dis = q.poll();
            dis ++;
            // System.out.println(x + " y:" + y + " dis: " + dis);
            for(int i = 0;i < 4;i ++) {
                int nx = x + dx[i];
                int ny = y + dy[i];
                if(nx < 0 || ny < 0 || nx >= m || ny >= n || maze[nx][ny] == '+' || f[nx][ny]) {
                    continue;
                }
                if(nx == 0 || ny == 0 || nx == m - 1 || ny == n - 1) {
                    ans = Math.min(ans, dis);
                }
                q.add(nx);
                q.add(ny);
                q.add(dis);
                f[nx][ny] = true;
            }   
        }
        return ans == Integer.MAX_VALUE ? -1 : ans;
    }
}

学习了下最短时间AC代码,它队列存的是类,差就差在这里,其他的我目前觉得大同小异