这道题考察的是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代码,它队列存的是类,差就差在这里,其他的我目前觉得大同小异