classSolution{public:intorangesRotting(vector<vector<int>>& grid){
vector<vector<int>> d ={{1,0},{-1,0},{0,1},{0,-1}};int m = grid.size();int n = grid[0].size();
queue<pair<int,int>> q;// 存储腐烂橘子的坐标int fleshNum =0;// 记录新鲜橘子的数量for(int i =0; i < m;++i){for(int j =0; j < n;++j){if(grid[i][j]==2){
q.emplace(i, j);}elseif(grid[i][j]==1){
fleshNum++;}}}int time =0;// 记录所用的时间bool flag =false;// 记录有没有新鲜橘子被腐烂,没有的话就可以退出循环了while(!q.empty()&& fleshNum){int num = q.size();for(int i =0; i < num;++i){auto[x, y]= q.front();
q.pop();for(int k =0; k <4;++k){int xx = x + d[k][0];int yy = y + d[k][1];if(xx >=0&& xx < m && yy >=0&& yy < n && grid[xx][yy]==1){
grid[xx][yy]=2;
q.emplace(xx, yy);
flag =true;
fleshNum--;}}}if(flag){
time++;
flag =false;}}return fleshNum ==0? time :-1;}};