• 【力扣】994.腐烂的橘子


     思路:这个题目一看就是用BFS法,并结合队列的使用,但是我不知道怎么用。嗯,后面会用了。具体就是先遍历一遍二维数组,得出所有新鲜橘子的数量,然后将烂掉的橘子收入队列中,后面再往四个方向进行腐烂的操作。再将已经腐烂掉的橘子收入队列中即可。

    1、临界条件:直到没有新鲜橘子

    2、用一个二维数组来控制其四周的移动

            vectorint, int>> dirs = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };
    

    代码如下:

    1. class Solution {
    2. public:
    3. int orangesRotting(vectorint>>& grid) {
    4. int min = 0,fresh = 0;
    5. queueint, int>> q;
    6. // 统计新鲜橘子的数量并将腐烂的橘子放入队列中
    7. for(int i = 0;i < grid.size();i++){
    8. for(int j = 0;j < grid[0].size();j++){
    9. if(grid[i][j] == 1) fresh++;
    10. else if(grid[i][j] == 2) q.push({i,j});
    11. }
    12. }
    13. //开始腐烂
    14. vectorint, int>> dirs = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };
    15. while(!q.empty()){
    16. int n = q.size();
    17. bool rotten = false; //用以判断是否发生了腐烂的这个行为
    18. // 这个操作是把每一次腐烂的橘子收进来,同时吐出上一次腐烂的橘子
    19. for(int i = 0; i < n; i++){
    20. auto x = q.front();
    21. q.pop();
    22. for(auto cur: dirs){
    23. int i = x.first + cur.first;
    24. int j = x.second + cur.second;
    25. if(i >= 0 && i < grid.size() && j>=0 && j < grid[0].size() && grid[i][j] == 1){
    26. grid[i][j] = 2;
    27. q.push({i,j});
    28. fresh--;
    29. rotten = true;
    30. }
    31. }
    32. }
    33. if(rotten) min++;
    34. }
    35. return fresh ? -1 : min;
    36. }
    37. };

  • 相关阅读:
    Python 算法交易实验43 实验笔记
    zookeeper leader选举机制
    JavaScript基础10——获取数据类型、类型转换
    Vue必备知识点(简单+快速上手Vue)
    rust - 理解 ToOwned trait
    leetcode 93 Restore IP Addresses详解
    LeetCo
    JAVA最佳学习方法
    Android 设计模式六大原则
    golang设计模式——中介模式
  • 原文地址:https://blog.csdn.net/qq_62649563/article/details/136354080