思路源自
【力扣hot100】【LeetCode 994】腐爛的橘子|多源BFS
這里圖中的腐爛的的橘子是同時對周圍進行腐化,所以采用多源bfs就能解決?
多源bfs與單源bfs的區別就在于隊列取出時一輪是取出隊列當中的全部元素
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;elsereturn result;}
}
?