本文主要是介绍leetcode-cpp 994.腐烂的橘子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
994.腐烂的橘子
-
链接
leetcode
-
solution:
胡烂的橘子
有点像那个染色问题
BFS 感觉难点在于怎么判断还能不能腐烂橘子 写了一堆又臭又长的代码…
ps:学会了一个东西 就是需要取上下左右值的时候 可以写一个数组{{1,0},{-1,0},{0,1},{0,-1}}
然后先计算 再判断是否超界 比一层一层的判断之后再计算好
-
code
class Solution {
public:
//BFS!!!!!!!!!!!!!!!!!!!!!!!!!!!int orangesRotting(vector<vector<int>>& grid) {if(grid.size()==0||grid[0].size()==0) return -1;queue<pair<int,int>>q;int count=0;for(int i=0;i<grid.size();i++){for(int j=0;j<grid[0].size();j++){if(grid[i][j]!=0) count++;if(grid[i][j]==2)q.push(make_pair(i,j)); }}int time=0;if(count==q.size()) return 0;vector<pair<int,int>>ms={{1,0},{-1,0},{0,1},{0,-1}};while(!q.empty()){int len=q.size();time++;while(len--){auto t=q.front();q.pop();for(auto m:ms){int x=t.first+m.first;int y=t.second+m.second;//pair<>is a good toolif(x<0||x>=grid.size()||y<0||y>=grid[0].size()) continue;//以后遇到这样用,就不用每次浪费if一大堆了//pair是个好东西if(grid[x][y]==1){grid[x][y]=2;q.push(make_pair(x,y));}}}}for(int i=0;i<grid.size();i++){for(int j=0;j<grid[0].size();j++){//if(grid[i][j]!=0) count++;if(grid[i][j]==1)return -1; }}return time-1;}
};
这篇关于leetcode-cpp 994.腐烂的橘子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!