赞
踩
读完题目感觉也就是个bfs的题。好吧 今天咳嗽咳到睡不着 直接起来做题了。。
思路:直接把最开始所有的腐烂的位置加入队列,然后bfs的时候每次取出的是腐烂的所有当前层橘子,
思路感觉一直都很清晰,就是代码挺复杂的还。
直接写代码吧:
- class Solution {
- typedef pair<int,int> PII;
- queue<PII>q;
- int dx[4]={0,0,-1,1},dy[4]={1,-1,0,0};
- public:
- int orangesRotting(vector<vector<int>>& grid) {
- int ans=0;//所需分钟数
- int n=grid.size();
- int m=grid[0].size();
- int xxjz=0;//新鲜橘子个数
- for(int i=0;i<n;i++)
- {
- for(int j=0;j<m;j++)
- {
- if(grid[i][j]==2)
- {
- q.push({i,j});
- }
- else if(grid[i][j]==1)
- {
- xxjz++;
- }
- }
- }
- if(xxjz==0) return 0;//一开始就没有新鲜橘子
- if(q.empty()) return -1;//没有腐烂的橘子但是有新鲜的橘子,故不可能
- while(!q.empty())
- {
- int sz=q.size();
- while(sz>0)
- {
- auto t=q.front();
- q.pop();
- sz--;
- int x=t.first;
- int y=t.second;
- for(int i=0;i<4;i++)
- {
- int nx=x+dx[i];
- int ny=y+dy[i];
- if(nx>=0&&nx<grid.size()&&ny>=0&&ny<grid[0].size()&&grid[nx][ny]==1)
- {
- q.push({nx,ny});
- grid[nx][ny]=2;
- xxjz--;
- }
- }
- }
- ans++; //这样写 ans 每次循环都会增加,即使这一轮并没有腐烂新的橘子。这个问题会导致最终返回的结果比实际所需的时间多1。
- }
- if(xxjz!=0) return -1;
- return ans-1;
- }
- };

感觉自己写这一块已经有点那个意思了,嘻嘻。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。