zoukankan      html  css  js  c++  java
  • 994. 腐烂的橘子

    在给定的网格中,每个单元格可以有以下三个值之一:

    值 0 代表空单元格;
    值 1 代表新鲜橘子;
    值 2 代表腐烂的橘子。
    每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。

    返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。

    示例 1:

    输入:[[2,1,1],[1,1,0],[0,1,1]]
    输出:4

    思路:bfs 遍历来处理,但是处理的时候需要注意这个是个 多源的,即 坏的橘子可能有好几个,可以把这些坏的橘子都当做第一层的结点。

    如何写(最短路径的) BFS 代码
    我们都知道 BFS 需要使用队列,代码框架是这样子的(伪代码):

    while queue 非空:
        node = queue.pop()
        for node 的所有相邻结点 m:
           if m 未访问过:
           queue.push(m)

    但是用 BFS 来求最短路径的话,这个队列中第 1 层和第 2 层的结点会紧挨在一起,无法区分。因此,我们需要稍微修改一下代码,在每一层遍历开始前,记录队列中的结点数量 nn ,然后一口气处理完这一层的 nn 个结点。代码框架是这样的:

    depth = 0 # 记录遍历到第几层, 这里也是需要计算的时间
    while queue 非空:
        depth++
        n = queue 中的元素个数
        循环 n 次:
            node = queue.pop()
            for node 的所有相邻结点 m:
                if m 未访问过:
                    queue.push(m)
  • 相关阅读:
    [算法初步]希尔排序
    逆波兰表达式1(简介)
    [数据结构]之链表
    [数据结构]之栈
    [算法初步]之归并排序
    [算法初步]之快速排序
    [算法初步]之冒泡排序
    逆波兰表达式2中缀转后缀表达式)
    [算法初步]之简单选择排序
    [数据结构]之顺序表
  • 原文地址:https://www.cnblogs.com/simplepaul/p/12431810.html
Copyright © 2011-2022 走看看