• Rotting Oranges


    题目链接

    Rotting Oranges - LeetCode

    注意点

    解法

    解法一:bfs。首先先统计所有新鲜的橘子数目fresh,如果fresh大于0则一直执行bfs。我们只处理昨天刚腐烂的橘子,grid[i][j]的值就表示第几天腐烂的橘子,由于新鲜橘子的值一开始就是2,所以每次修改的时候都要改为day+3day+1+2(2是本来就有的,1表示经过了一天)。如果bfs之后发现新鲜橘子数没有减少则return -1,否则继续下一天的腐烂。

    class Solution {
    public:
        int bfs(vector<vector<int>>& grid,int x,int y,int day)
        {
            if(x < 0||y < 0||x >= grid.size()||y >= grid[x].size()||grid[x][y] != 1) return 0;
            grid[x][y] = day+3;
            return 1;
        }
        int orangesRotting(vector<vector<int>>& grid) {
            int i,j,day = 0,fresh = 0;
            for(i = 0;i < grid.size();i++)
            {
                for(j = 0;j < grid[i].size();j++)
                {
                    if(grid[i][j] == 1) fresh += 1;
                }
            }
            while(fresh > 0)
            {
                int old_fresh = fresh;
                for(i = 0;i < grid.size();i++)
                {
                    for(j = 0;j < grid[i].size();j++)
                    {
                        if(grid[i][j] == day+2)
                        {
                            fresh -= bfs(grid,i,j+1,day)+bfs(grid,i,j-1,day)+bfs(grid,i+1,j,day)+bfs(grid,i-1,j,day);
                        }
                    }
                }
                if(old_fresh == fresh) return -1;
                day++;
            }
            return day;
        }
    };
    

    小结

    • bfs重要的是找好边界条件以及每次修改的值。
  • 相关阅读:
    学习进度笔记06
    学习进度笔记05
    学习进度笔记04
    学习进度笔记03
    学习进度笔记02
    周总结13
    周总结12
    周总结11
    人月神话阅读笔记3
    第一阶段冲刺10
  • 原文地址:https://www.cnblogs.com/multhree/p/10391038.html
Copyright © 2020-2023  润新知