import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param grid int整型ArrayList<ArrayList<>>
* @return int整型
*/
public int rotApple (ArrayList<ArrayList<Integer>> grid) {
//上下左右
int []dx={0,0,-1,1};
int []dy={-1,1,0,0};
int ret=0;
int m=grid.size();
int n=grid.get(0).size();
boolean vis[][]=new boolean[m][n];
LinkedList<int []>queue=new LinkedList<>();
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(grid.get(i).get(j)==2){
queue.add(new int[]{i,j});
}
}
}
while(!queue.isEmpty()){
int sz=queue.size();
while(sz--!=0){
int []t=queue.poll();
int a=t[0],b=t[1];//x,y
for(int i=0;i<4;i++){
int x=a+dx[i],y=b+dy[i];
if(x>=0&&x<m&&y>=0&&y<n&&!vis[x][y]&&grid.get(x).get(y)==1){
vis[x][y]=true;
queue.add(new int[]{x,y});
}
}
}
ret++;
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(grid.get(i).get(j)==1&&!vis[i][j]){
return -1;
}
}
}
return ret-1;
}
}