leetcode994
用BFS来解决,难点在于,同时可能有多个腐烂的橘子(2),需要做BFS。利用vector<pair<int,int>>结构,采用队列方式来做。
注意:
emplace_back的使用,需要c++11
分析:
代码:
class Solution {
public:
int orangesRotting( vector<vector<int> >& grid) {
vector<pair<int,int> > que;
int m = grid.size();
if(m == 0)return 0;
int n = grid[0].size();
int orange_sum = 0 ;
for(int i = 0 ; i < m ; i++){
for(int j = 0 ; j < n ; j++){
if(grid[i][j] != 0)orange_sum++;
if(grid[i][j] == 2)que.emplace_back(i,j);
}
}
if(que.size() == orange_sum) return 0;
if(que.size() == 0 && orange_sum != 0)return -1;
int dx[] = {0,0,-1,1};
int dy[] = {1 ,-1,0,0};
int que_size = que.size();
int last_end = 0;
for(int i = 1 ; ;i++){
for(int j = last_end ; j <que_size ;j++){
for(int q =0 ; q <4;q++){
int nx = que[j].first+dx[q];
int ny = que[j].second + dy[q];
if(nx < m && nx >=0 && ny>= 0 && ny<n){
if(grid[nx][ny] == 1){
grid[nx][ny] = 2;
que.emplace_back(nx,ny);
}
}
}
}
if(que.size() == orange_sum)return i;
if(last_end == que.size())return -1;
last_end = que_size;
que_size = que.size();
}
}
};

浙公网安备 33010602011771号