刚开始写的时候没有考虑层次遍历,后来发现用了层次遍历也不对,后来发现是要统计个数的锅,因为要的是什么时候全部腐烂,如果都腐烂就要跳出来了,但此时还有继续循环,。
class Solution {
public:
struct Node{
int x,y;
};
const int dx[4]={0,0,1,-1};
const int dy[4]={1,-1,0,0};
int orangesRotting(vector<vector<int>>& grid) {
if(grid.size()==0||grid[0].size()==0){
return 0;
}
int cnt=0;
for(int i=0;i<grid.size();i++){
for(int j=0;j<grid[0].size();j++){
if(grid[i][j]==1){
cnt++;
}
}
}
queue<Node> Q;
int sign=0;
for(int i=0;i<grid.size();i++){
for(int j=0;j<grid[0].size();j++){
if(grid[i][j]==2){
struct Node N;
N.x=i;
N.y=j;
Q.push(N);
}
}
}
while(!Q.empty()&&cnt>0){
sign++;
int n=Q.size();
for(int k=0;k<n;k++){
struct Node T;
T=Q.front();
Q.pop();
for(int i=0;i<4;i++){
int ni=T.x+dx[i];
int nj=T.y+dy[i];
if(ni>=0&&ni<grid.size()&&nj>=0&&nj<grid[0].size()&&grid[ni][nj]==1){
grid[ni][nj]=2;
cnt--;
struct Node S;
S.x=ni;
S.y=nj;
Q.push(S);
}
}
}
}
if(cnt>0){
return -1;
}
else{
return sign;
}
}
};