Leetcode 994. Rotting Oranges (python+cpp)

这篇博客讨论了LeetCode的994题——腐烂的橙子。作者提供了两种使用BFS(广度优先搜索)的解法来解决这个问题,而非使用DFS。在第一种解法中,通过维护每个层级的列表来跟踪扩张的步数,当搜索完成后,如果有1未被替换则返回-1,否则返回步数。第二种解法简化了level的跟踪,通过在每个层级插入标志(-1,-1)并在遇到时增加分钟数。同时,文章附带了Python和C++的实现代码。" 43062719,1424268,反汇编视角下的switch...case实现原理,"['逆向工程', 'C语言', '汇编语言', '程序分析']
摘要由CSDN通过智能技术生成

Leetcode 994. Rotting Oranges

题目

在这里插入图片描述

BFS解法1:

这是个典型的BFS题目,虽然DFS也可以解,但是都已经明确说了四个方向,那么当然是BFS更make sense,要求的目标就是BFS向外扩张的次数。但是普通的BFS在搜索的时候是不会track现在所在的level的,也就是扩张的第几步,为了track这个level可以这么做。

  • 对于每个level,新建一个空的list,然后同level的位置放入同一个列表,一次搜索将同level的所有位置都搜索完毕,然后minute加1
  • 搜索结束后再遍历一遍所有的位置,若还有1剩下,则返回-1,否则返回前面计算的BFS扩张步数
  • 值得注意的是,初始的minute值应该是-1,或者说最后减1,因为到最后一个level并不会继续扩张
    python代码如下:
class Solution:
    def orangesRotting(self, grid: List[List[int]]) -> int:
        m,n = len(grid),len(grid[0])
        q = collections.deque()
        init_pos = []
        for i in range(m):
            for j in range(n):
                if grid[i][j] == 2:
                    init_pos.append((i,j))
        q.append(init_pos)
        
        dirs = [[0,1],[0,-1],[1,0<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值