leetcode994

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();
		}
    }
};

  

posted @ 2019-03-05 17:18  玛吉  阅读(252)  评论(0)    收藏  举报