题目要求
在给定的网格中,每个单元格可以具有以下三个值之一:
值0表示空单元格;
值1表示鲜橙;
值2表示烂橙。
每一分钟,与腐烂的橙相邻(4方向)的任何新鲜橙色都会腐烂。
返回必须经过的最小分钟数,直到没有细胞有新鲜橙色。 如果这是不可能的,请返回-1。
解题思路
本题是一道非常好的BFS扩展练习,跳出常规的树形层序遍历方法。
我们看给出的实例,实际上他也可以看成是一种层序遍历,第一层就是烂橙的起始位置,然后我们把他可能传播的四个方向加入到队列中,看成第二层,然后依次类推,实际上最后返回的就是层数。
但是由于存在一种可能,使得不会将全部的橘子变成腐烂的,所以我们要记录一下橘子个数。用来判断是否全部的橘子都被腐烂。
难点: 在判断下一层的时候,记得判断一下是否合法,超出数组的边界,以及是否已经被遍历过了。
主要代码c++
class Solution {
public:
int orangesRotting(vector<vector<int>>& grid) {
int ct = 0, minutes = -1;
queue<vector<int>>q;
vector<vector<int>> dir ={
{
-1,0}, {