Leetcode题目:腐烂的橘子
在给定的网格中,每个单元格可以有以下三个值之一:
值 0 代表空单元格;
值 1 代表新鲜橘子;
值 2 代表腐烂的橘子。
每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。
返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。
int orangesRotting(vector> &grid) {
int min = 0, fresh = 0;
queue> rot;
for (int i = 0; i < grid.size(); i++) {
for (int j = 0; j < grid[0].size(); j++)
if (grid[i][j] == 1) fresh++;
else if (grid[i][j] == 2) rot.push({i, j});
}
vector> nxt = {{-1, 0},
{1, 0},
{0, -1},
{0, 1}};
while (!rot.empty()) {
int n = rot.size();
int col= grid.size();
int row=grid[0].size();
for (int i = 0; i < n; i++) {
auto x = rot.front();
rot.pop();
for (auto cur: nxt) {
int i = x.first + cur.first;
int j = x.second + cur.second;
if (i >= 0 && i < col && j >= 0 && j < row && grid[i][j] == 1) {
grid[i][j] = 2;
rot.push({i, j});
fresh--;
}
}
}
if (!rot.empty()) min++;
}
//最后判断是否仍存在新鲜橘子
return fresh ? -1 : min;
}