牛客网题目链接(点击即可跳转):腐烂的苹果_牛客题霸_牛客网
本题详情如下图:
本题解题思路如下: 多源bfs,每层的坏果入队列,传染完周围的好果就出队列,直到队列为空,传染完毕,传染的层数就是用的时间.最后检查传染完还有没有好果,如果有那直接返回-1即可,否则返回time.
本题解题代码如下:
class Solution {
public:
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
int rotApple(vector<vector<int> >& grid)
{
//多源bfs+最短路径
queue<pair<int, int>> q;
int time = 0;
//所有坏果入队列
for (int i = 0; i < grid.size(); i++)
{
for (int j = 0; j < grid[0].size(); j++)
{
if (grid[i][j] == 2)
q.push({i, j});
}
}
//坏果开始bfs传染
while (!q.empty())
{
int sz = q.size();//记录本层坏果个数,后续本层坏果传染统一算一分钟
while (sz--)
{
int x = q.front().first;
int y = q.front().second;
for (int i = 0; i < 4; i++)
{
int xi = x + dx[i];
int yi = y + dy[i];
if (xi >= 0 && xi < grid.size() && yi >= 0 && yi < grid[0].size() &&grid[xi][yi] == 1)
{
grid[xi][yi] = 2;
q.push({ xi, yi });
}
}
q.pop();
}
time++;
}
//检查有无好果
for (int i = 0; i < grid.size(); i++)
{
for (int j = 0; j < grid[0].size(); j++)
{
if (grid[i][j] == 1)
return -1;
}
}
return time-1;
}
};
说点啥好呢...原来被墙的原因是运营商直接把发往外网的请求给扔了...怪不得...好搞笑啊哈哈哈!这道题...让我闻到了一股熟悉的二叉树的味道...所以最终还是忘记它了吗...真的遗憾呐...