题解 | 腐烂的苹果

腐烂的苹果

https://www.nowcoder.com/practice/54ab9865ce7a45968b126d6968a77f34?tpId=196&tqId=40529&ru=/exam/oj

import java.util.*;

//多源bfs
public class Solution {
  //用于访问四周节点
    int[] dx = {0,0,1,-1};
    int[] dy = {1,-1,0,0};
    public int rotApple (ArrayList<ArrayList<Integer>> grid) {
        int m = grid.size();
        int n = grid.get(0).size();
        Queue<int []> queue = new LinkedList<>();
        boolean[][] vis = new boolean[m][n];
        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});

                }
            }
            
        }
        int ret = 0;
        while(!queue.isEmpty()){//有烂苹果,开始腐烂
            int sz = queue.size();
            while(sz--!=0){//让所有烂苹果开始传染
                int[] t = queue.poll();
                int a = t[0],b=t[1];
                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++;
        }//当队列为空,说明传染结束了
	  //此时如果还有1说明有苹果没有被污染
        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;//返回-1

                }
            }
            
        }
        
        
        return ret-1;
    }
}

全部评论

相关推荐

勤奋努力的椰子这就开摆:这些经历跟硬件都没啥关系呀
点赞 评论 收藏
分享
03-13 10:35
安徽大学 Java
牛客246100688号:蚂蚁卡简历的,简历看不上眼全a了也不会有面试的。
投递蚂蚁集团等公司10个岗位
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务