在给定的网格中,每个单元格可以有以下三个值之一:值 0 代表空单元格;
值 1 代表新鲜橘子;
值 2 代表腐烂的橘子。
每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。示例 1:输入:[[2,1,1],[1,1,0],[0,1,1]]
输出:4
示例 2:输入:[[2,1,1],[0,1,1],[1,0,1]]
输出:-1
解释:左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个正向上。
示例 3:输入:[[0,2]]
输出:0
解释:因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0 。提示:1 <= grid.length <= 10
1 <= grid[0].length <= 10
grid[i][j] 仅为 0、1 或 2来源:力扣(LeetCode)
链接:
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {int[][] dir = {{1,0}, {0,1}, {-1,0}, {0,-1}};//多源广度优先public int orangesRotting(int[][] grid) {Queue<Integer> queue = new LinkedList<>();Map<Integer, Integer> map = new HashMap<>();int m = grid.length;int n = grid[0].length;for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){int node = i*n + j;if(grid[i][j] == 2) {queue.add(node);map.put(node, 0);}}} int res = 0;while(!queue.isEmpty()){int node = queue.poll();int i = node/n;int j = node%n;for(int k = 0; k < 4; k++){int ni = i + dir[k][0];int nj = j + dir[k][1];if(ni >= 0 && nj >= 0 && ni < m && nj < n && grid[ni][nj] == 1){grid[ni][nj] = 2;int node2 = ni*n + nj;queue.add(node2);int tmp = (node)+1;map.put(node2, tmp);res = tmp;}}}for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(grid[i][j] == 1) return -1;}}return res;}
}
本文发布于:2024-02-01 02:56:55,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170672741533374.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |