力扣994——腐烂的橘子(多源BFS)

这是一个关于算法实现的问题,代码描述了一种解决方案,利用广度优先搜索(BFS)来模拟腐烂橘子在网格中扩散的过程。从所有腐烂的橘子位置开始,每一步更新相邻的未腐烂橘子状态,直到所有橘子都腐烂或无法继续传播。函数返回腐烂过程所需的最短时间,如果不能全部腐烂则返回-1。
摘要由CSDN通过智能技术生成

题目链接

多源BFS,从每个腐烂的橘子同时出发,类似层序遍历,层数就是感染时间

class Solution {
public:
    vector<pair<int, int>> dir = {{-1,0}, {1,0}, {0,-1}, {0,1}};
    int orangesRotting(vector<vector<int>>& grid) {
        int m = grid.size(), n = grid[0].size(), ans = -1, flag = 0;
        queue<pair<int, int>> q;
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                if(grid[i][j] == 2) q.push({i, j});
                if(grid[i][j]) flag = 1;
            }
        }
        if(flag == 0) return 0;
        while(!q.empty()) {
            int tmpn = q.size();
            ans++;
            while(tmpn--) {
                auto [x, y] = q.front(); q.pop();
                for(auto [dx, dy] : dir) {
                    int nx = x + dx, ny = y + dy;
                    if(nx < 0 || nx >= m || ny < 0 || ny >= n) continue;
                    if(grid[nx][ny] == 1) {
                        grid[nx][ny] = 2;
                        q.push({nx, ny});
                    }
                }
            }
        }
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                if(grid[i][j] == 1) return -1;
            }
        }
        return ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值