import java.util.LinkedList;
import java.util.Queue;
class Solution {
public int solution(int[][] maps) {
int[] dx = {-1, 0, 1, 0};
int[] dy = {0, 1, 0, -1};
Queue<int[]> Q = new LinkedList<>();
int X = maps.length;
int Y = maps[0].length;
int[][] dist = new int[X][Y];
Q.offer(new int[]{0, 0});
int answer = 1;
while(!Q.isEmpty()){
int len = Q.size();
for(int i = 0; i < len; i++){
int[] p = Q.poll();
for(int k = 0; k < 4; k++){
int nx=p[0]+dx[k];
int ny=p[1]+dy[k];
if(nx >= 0 && nx < X && ny >= 0 && ny < Y && maps[nx][ny] == 1){
maps[nx][ny] = 0;
Q.offer(new int[]{nx, ny});
dist[nx][ny] = answer + 1;
}
}
}
answer++;
}
if(dist[X - 1][Y - 1]==0) return -1;
else return dist[X - 1][Y - 1];
}
}