力扣-994-腐烂的橘子
模拟过程,只是这个过程有点像广度优先搜索
- 不再发生腐烂,不是全部的退出条件,还有一半是新鲜橘子数为 0(0 返回 count,非 0 返回 -1)
- 被感染的橘子数字为源 + 1,避免重复无意义遍历
public int orangesRotting(int[][] grid) {
int rows = grid.length;
int cols = grid[0].length;
// 模拟
int count = 0;
int freshOrange = 0;
// 当没有新的橘子被传染时,推出
for (int[] ints : grid) {
for (int j = 0; j < cols; j++) {
if (ints[j] == 1) {
freshOrange++;
}
}
}
while (freshOrange != 0) {
int original = freshOrange;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (grid[i][j] == 2 + count) {
if (i - 1 >= 0 && grid[i - 1][j] == 1) {
grid[i - 1][j] = 2 + count + 1;
freshOrange--;
}
if (i + 1 <= rows - 1 && grid[i + 1][j] == 1) {
grid[i + 1][j] = 2 + count + 1;
freshOrange--;
}
if (j - 1 >= 0 && grid[i][j - 1] == 1) {
grid[i][j - 1] = 2 + count + 1;
freshOrange--;
}
if (j + 1 <= cols - 1 && grid[i][j + 1] == 1) {
grid[i][j + 1] = 2 + count + 1;
freshOrange--;
}
}
}
}
if (original == freshOrange) {
return -1;
}
count++;
}
return count;
}

浙公网安备 33010602011771号