题目描述在给定的 m x n 网格 grid 中每个单元格可以有以下三个值之一值 0 代表空单元格值 1 代表新鲜橘子值 2 代表腐烂的橘子。每分钟腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能返回 -1 。示例 1输入grid [[2,1,1],[1,1,0],[0,1,1]]输出4示例 2输入grid [[2,1,1],[0,1,1],[1,0,1]]输出-1解释左下角的橘子第 2 行 第 0 列永远不会腐烂因为腐烂只会发生在 4 个方向上。示例 3输入grid [[0,2]]输出0解释因为 0 分钟时已经没有新鲜橘子了所以答案就是 0 。提示m grid.lengthn grid[i].length1 m, n 10grid[i][j] 仅为 0、1 或 2思路进行多源广度优先搜索多个起点视为同一层。代码classSolution{public:// 定义四个方向intdx[4]{1,-1,0,0},dy[4]{0,0,1,-1};intorangesRotting(vectorvectorintgrid){// 分钟数intres0;// 新鲜橘子个数intcnt0;// 存储烂橘子的位置queuearrayint,2q;// 获取矩阵边界intngrid.size(),mgrid[0].size();for(inti0;in;i){for(intj0;jm;j){if(grid[i][j]1)cnt;elseif(grid[i][j]2){q.push({i,j});grid[i][j]0;}}}// 进行层次遍历intqzq.size();while(cnt!q.empty()){auto[x,y]q.front();q.pop();--qz;for(inti0;i4;i){intxxxdx[i],yyydy[i];if(xx0xxnyy0yymgrid[xx][yy]1){--cnt;grid[xx][yy]0;q.push({xx,yy});}}// 每层结束或者全部腐烂, resif(qz!0cnt0){res;}elseif(qz0){res;qzq.size();}}// 返回分钟数if(cnt)return-1;elsereturnres;}};