题解 | #疯牛病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;
    }
};

全部评论

相关推荐

03-03 23:12
已编辑
北京邮电大学 Java
书海为家:我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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