题解 | 腐烂的苹果

腐烂的苹果

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-28 16:43
佛山大学 Java
在度假的布拉德很想退...:你这实习项目写的也太简单了吧?业务加技术难点要体现出来呀,你这写的都不知道具体干了什么
点赞 评论 收藏
分享
03-03 23:12
已编辑
北京邮电大学 Java
书海为家:我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
你的简历改到第几版了
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务