leetcode994.腐烂的橘子

思路源自

【力扣hot100】【LeetCode 994】腐烂的橘子|多源BFS

这里图中的腐烂的的橘子是同时对周围进行腐化,所以采用多源bfs就能解决

多源bfs与单源bfs的区别就在于队列取出时一轮是取出队列当中的全部元素

java 复制代码
class Solution {
    public int orangesRotting(int[][] grid) {
        int[][] dirs = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};//记录四个方向
        int result=0;//记录需要的分钟数
        int fresh=0;//记录新鲜橘子的数目
        Queue<int[]> queue = new ArrayDeque<>();//队列存储腐烂橘子
        int m = grid.length, n = grid[0].length;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if(grid[i][j]==1)
                    fresh++;
                else if(grid[i][j]==2)
                    queue.add(new int[]{i, j});
            }
        }
        while (!queue.isEmpty()) {
            int len = queue.size();
            while (len-- != 0) {
                int[] coordinate = queue.remove();
                //腐化四个方向上的新鲜橘子
                for (int[] dir : dirs) {
                    int x = coordinate[0] + dir[0];
                    int y = coordinate[1] + dir[1];
                    if(x<0||y<0||x>=m||y>=n||grid[x][y]!=1)
                        continue;
                    queue.add(new int[]{x, y});
                    grid[x][y]=2;
                    fresh--;
                }
            }
            if(!queue.isEmpty())//下一轮还有
                result++;
        }
        if(fresh>0)
            return -1;
        else
            return result;
    }
}
相关推荐
都叫我大帅哥2 分钟前
LangChain4j:Java开发者的大模型“魔法工具箱” ——从入门到“入土”,一篇全搞定
java·ai编程
啊阿狸不会拉杆2 分钟前
数据结构-排序
java·c语言·数据结构·c++·python·算法·排序算法
sinat_262292113 分钟前
Java面试实战:电商场景下的Spring Cloud微服务架构与缓存技术剖析
java·redis·spring cloud·微服务·消息队列·缓存技术·监控运维
大阔3 分钟前
安卓开发中XML布局的实用技巧 —— 移动应用开发(安卓)
java
用户484695206974 分钟前
ArrayList 源码分析
java
大阔4 分钟前
如何使用Intent在安卓Activity间传输数据 —— 移动应用开发(安卓)
java
AronTing6 分钟前
缓存与数据库一致性深度解析与解决方案
java·后端·面试
AronTing6 分钟前
分布式缓存与本地缓存协同优化实践
java·后端·面试
姜行运7 分钟前
数据结构【树和二叉树】
android·数据结构·算法·c#