题解 | #疯牛病II#

疯牛病II

https://www.nowcoder.com/practice/2d5c96e452a949e09d98bb32aec3b61d

class Solution {
  public:
    int healthyCowsII(vector<vector<int> >& pasture) {
        int dx[4] = {-1, 1, 0, 0};
        int dy[4] = {0, 0, 1, -1};
        int m = pasture.size(), n = pasture[0].size();
        queue<pair<int, int>> queue;
        int count = 0;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (pasture[i][j] == 2) queue.push({i, j});
                else if (pasture[i][j] == 1) count++;
            }
        }
        if (count == 0) return 0; //特判
        int flag;
        int min = 0;
        while (!queue.empty()) {
            int size = queue.size();
            flag = 0;
            for (int i = 0; i < size; i++) {
                auto [x, y] = queue.front();
                queue.pop();
                for (int j = 0; j < 4; j++) {
                    int ix = x + dx[j], iy = y + dy[j];
                    if (ix < 0 || ix >= m || iy < 0 || iy >= n || pasture[ix][iy] != 1) continue;
                    pasture[ix][iy] = 2;
                    queue.push({ix, iy});
                    count--;
                    flag = 1;  //标记这一分钟出现了感染,若该循环未出现感染则程序结束
                }
            }
            min++;
            if (count == 0) return min;
            if (!flag) return -1;
        }
        return count;
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-25 17:26
点赞 评论 收藏
分享
想按时下班的大菠萝在...:隔壁学校的,加油多投, 实在不好找可以下个学期开学找,把算法八股准备好,项目有空再换换
投了多少份简历才上岸
点赞 评论 收藏
分享
07-24 03:49
门头沟学院 Java
牛客73769814...:这种小作坊去了也费劲
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-25 18:02
来组里2个月了,天天让打杂,写的代码不超过200行。现在已经开始摆烂冲秋招了。我感觉4个月,就算周六日全天睡觉,周一到周五一直看黑马也比我来节子实习学到的东西多。
小熊梦奇:😅节子那么多文档,你是一个都不看啊。 大厂的意义在于内部系统对你开放,看明白事情起因经过结果解决措施,实在看不明白,直接聊天系统搜到对应团队去问当时的负责人,大部分情况下都会给你解答。 这才是大厂实习的精髓
实习生的蛐蛐区
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务