题解 | #疯牛病II#

题目考察的知识点

  1. 二维数组的遍历与操作:题目中给出一个 m x n 的牧场,需要遍历整个二维数组,并进行相应的操作。

  2. 广度优先搜索(BFS):题目描述了疯牛病在牧场中的传播过程。BFS是一种图遍历算法,可以用来模拟疯牛病的传播过程。

  3. 健康牛感染的条件判断:题目规定了健康牛感染的条件,即患病牛周围的四个方向上的健康牛会被感染,需要根据这个条件进行判断。

题目解答方法的文字分析

在题目解答方法的文字分析中,我们通过遍历整个牧场,将患有疯牛病的牛的位置保存到队列中,并记录当前牧场中健康牛的数量。然后,使用BFS来模拟疯牛病的传播过程,每次从队列中取出一个感染牛,并将其周围的健康牛感染,并将感染后的牛加入队列。同时,计数器加1,表示经过了1分钟。继续循环直到队列为空,表示所有的感染已经完成。最后,判断是否还有健康的牛留在牧场中,如果有,则返回-1,表示不可能到达没有健康牛的情况;否则,返回计数器的值减去1,表示到达没有健康牛的最小分钟数。

本题解析所用的编程语言

本题解析所用的编程语言是JavaScript。JavaScript是一门脚本语言,广泛应用于Web开发。

完整且正确的编程代码

function healthyCowsII(pasture) {
  const m = pasture.length;
  const n = pasture[0].length;
  const queue = [];

  let healthyCount = 0; // 健康牛的数量

  // 遍历牧场,将患有疯牛病的牛加入队列,并记录健康牛的数量
  for (let i = 0; i < m; i++) {
    for (let j = 0; j < n; j++) {
      if (pasture[i][j] === 2) {
        queue.push([i, j]);
      } else if (pasture[i][j] === 1) {
        healthyCount++;
      }
    }
  }

  // 牛的四个方向的偏移量
  const directions = [[-1, 0], [1, 0], [0, -1], [0, 1]];

  let minutes = 0; // 记录经过的分钟数

  // 模拟疯牛病的传播过程
  while (queue.length > 0) {
    const size = queue.length;

    for (let i = 0; i < size; i++) {
      const [x, y] = queue.shift();

      for (const [dx, dy] of directions) {
        const newX = x + dx;
        const newY = y + dy;
        // 判断新位置是否在牧场范围内且为健康的牛
        if (newX >= 0 && newX < m && newY >= 0 && newY < n && pasture[newX][newY] === 1) {
          // 将健康牛感染,并将感染后的牛加入队列
          pasture[newX][newY] = 2;
          queue.push([newX, newY]);
          healthyCount--; // 健康牛数量减少
        }
      }
    }

    if (queue.length > 0) {
      minutes++; // 每次处理完当前队列中的牛,分钟数加1
    }
  }

  if (healthyCount > 0) {
    return -1; // 还有健康的牛留在牧场中,不可能到达没有健康牛的情况
  } else {
    return minutes; // 返回经过的分钟数
  }
}
题解 | 前端刷题 文章被收录于专栏

题目考察的知识点 题目解答方法的文字分析 本题解析所用的编程语言 完整且正确的编程代码

全部评论

相关推荐

11-23 15:14
中原工学院 Java
程序员花海_:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
11-13 20:16
已编辑
厦门理工学院 软件测试
专业嗎喽:硕佬,把学校背景放后面几段,学校背景双非还学院,让人看了就不想往下看。 把实习经历和个人奖项放前面,用数字化简述自己实习的成果和掌握的技能,比如负责项目一次通过率90%,曾4次发现项目潜在问题风险为公司减少损失等等
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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