当前位置:   article > 正文

腐烂的橘子

腐烂的橘子

腐烂的橘子

读完题目感觉也就是个bfs的题。好吧 今天咳嗽咳到睡不着 直接起来做题了。。

思路:直接把最开始所有的腐烂的位置加入队列,然后bfs的时候每次取出的是腐烂的所有当前层橘子,

思路感觉一直都很清晰,就是代码挺复杂的还。

直接写代码吧:

  1. class Solution {
  2. typedef pair<int,int> PII;
  3. queue<PII>q;
  4. int dx[4]={0,0,-1,1},dy[4]={1,-1,0,0};
  5. public:
  6. int orangesRotting(vector<vector<int>>& grid) {
  7. int ans=0;//所需分钟数
  8. int n=grid.size();
  9. int m=grid[0].size();
  10. int xxjz=0;//新鲜橘子个数
  11. for(int i=0;i<n;i++)
  12. {
  13. for(int j=0;j<m;j++)
  14. {
  15. if(grid[i][j]==2)
  16. {
  17. q.push({i,j});
  18. }
  19. else if(grid[i][j]==1)
  20. {
  21. xxjz++;
  22. }
  23. }
  24. }
  25. if(xxjz==0) return 0;//一开始就没有新鲜橘子
  26. if(q.empty()) return -1;//没有腐烂的橘子但是有新鲜的橘子,故不可能
  27. while(!q.empty())
  28. {
  29. int sz=q.size();
  30. while(sz>0)
  31. {
  32. auto t=q.front();
  33. q.pop();
  34. sz--;
  35. int x=t.first;
  36. int y=t.second;
  37. for(int i=0;i<4;i++)
  38. {
  39. int nx=x+dx[i];
  40. int ny=y+dy[i];
  41. if(nx>=0&&nx<grid.size()&&ny>=0&&ny<grid[0].size()&&grid[nx][ny]==1)
  42. {
  43. q.push({nx,ny});
  44. grid[nx][ny]=2;
  45. xxjz--;
  46. }
  47. }
  48. }
  49. ans++; //这样写 ans 每次循环都会增加,即使这一轮并没有腐烂新的橘子。这个问题会导致最终返回的结果比实际所需的时间多1。
  50. }
  51. if(xxjz!=0) return -1;
  52. return ans-1;
  53. }
  54. };

感觉自己写这一块已经有点那个意思了,嘻嘻。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/989490
推荐阅读
相关标签
  

闽ICP备14008679号