答案:
class Solution {
public int nearestExit(char[][] maze, int[] entrance) {
List<Integer[]> curPoss = new ArrayList<>();
Integer[] pos = {entrance[0],entrance[1],0};
curPoss.add(pos);
while(curPoss.size()>0){
List<Integer[]> newCurPoss = new ArrayList<>();
for(Integer[] curPos:curPoss){
int x = curPos[0];//row
int y = curPos[1];//coloum
int time = curPos[2];
maze[x][y]='+';
if(x>0&&maze[x-1][y]=='.'){
maze[x-1][y]='+';
if(x-1==0||y==maze[0].length-1||y==0){
return time+1;
}
Integer[] newPos = {x-1,y,time+1};
if(!newCurPoss.contains(newPos)){
newCurPoss.add(newPos);
}
}
if(x<maze.length-1&&maze[x+1][y]=='.'){
maze[x+1][y]='+';
if(x+1==maze.length-1||y==maze[0].length-1||y==0){
return time+1;
}
Integer[] newPos = {x+1,y,time+1};
if(!newCurPoss.contains(newPos)){
newCurPoss.add(newPos);
}
}
if(y>0&&maze[x][y-1]=='.'){
maze[x][y-1]='+';
if(y-1==0||x==0||x==maze.length-1){
return time+1;
}
Integer[] newPos = {x,y-1,time+1};
if(!newCurPoss.contains(newPos)){
newCurPoss.add(newPos);
} }
if(y<maze[0].length-1&&maze[x][y+1]=='.'){
maze[x][y+1]='+';
if(y+1==maze[0].length-1||x==0||x==maze.length-1){
return time+1;
}
Integer[] newPos = {x,y+1,time+1};
if(!newCurPoss.contains(newPos)){
newCurPoss.add(newPos);
}
}
}
curPoss = newCurPoss;
}
return -1;
}
}