在给定的网格中,每个单元格可以有以下三个值之一:
值 0 代表空单元格;
值 1 代表新鲜橘子;
值 2 代表腐烂的橘子。
每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。
返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。
tips:bfs, 记录下位置信息的同时记录下所用时间,维护一个最大时间
class Solution {
public:
int orangesRotting(vector<vector<int>>& grid) {
if(grid.size()==0) {
return 0;
}
queue<vector<int>> rotted;
vector<pair<int,int>> watch={{0,-1},{1,0},{-1,0},{0,1}};
for (int i = 0; i < grid.size(); i++)
{
for (int j = 0; j < grid[i].size(); j++)
{
if(grid[i][j]==2) {
rotted.push({i,j,0});
}
}
}
int maxMinutes=0;
int nowMinutes=0;
while (!rotted.empty())
{
vector<int> temp=rotted.front();
rotted.pop();
for (int i = 0; i < watch.size(); i++)
{
int x=temp[0]+watch[i].first;
int y=temp[1]+watch[i].second;
if(x>=0 && x<grid.size()&&y>=0&& y<grid[0].size()&&grid[x][y]==1) {
grid[x][y]=2;
nowMinutes=temp[2]+1;
if(nowMinutes>maxMinutes) {
maxMinutes=nowMinutes;
}
rotted.push({x,y,nowMinutes});
}
}
}
for (int i = 0; i < grid.size(); i++)
{
for (int j = 0; j < grid[i].size(); j++)
{
if(grid[i][j]==1) {
return -1;
}
}
}
return maxMinutes;
}
};