为了方便记录走了几步,需要用到广度优先搜索。
class Solution {
public int orangesRotting(int[][] grid) {
Queue<int[]> q = new LinkedList<>();
int fresh = 0;
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[0].length;j++){
if(grid[i][j]==2){
q.add(new int[]{i,j});
}
if(grid[i][j]==1){
fresh++;
}
}
}
if(fresh==0) return 0;
int[][] direct = new int[][]{{0,1},{0,-1},{1,0},{-1,0}};
int res = 0;
while(!q.isEmpty()){
res++;
int size = q.size();
for(int i=0;i<size;i++){
int[] tmp = q.poll();
for(int j=0;j<4;j++){
int x = tmp[0]+direct[j][0];
int y = tmp[1]+direct[j][1];
if(x>=0 && x<grid.length && y>=0 && y<grid[0].length){
if(grid[x][y]==1){
fresh--;
grid[x][y] = 2;
q.add(new int[]{x,y});
}
}
}
}
if(fresh==0) break;
}
if(fresh!=0){
return -1;
}
return res;
}
}