leetcode 994. 腐烂的橘子 python

这篇博客介绍了一种利用广度优先搜索(BFS)解决网格中腐烂橘子传播问题的方法。算法首先将初始腐烂位置加入队列,然后逐层处理相邻的橘子,直到队列为空。在此过程中,记录处理时间并检查是否存在未被腐烂的橘子。若存在未被腐烂的橘子,则返回-1,否则返回处理完成的时间。
摘要由CSDN通过智能技术生成

题目描述:

 

题解:

广度优先搜索

基本思路:

1.创建一个队列myq,初始时加入grid中值为2的位置坐标。

2.每次从myq中取出一个坐标(posx,posy),依次判断该位置上下左右四个相邻位置的grid值是否为1,如果是1,将该相邻位置加入myq,并将grid中该位置的值修改为2,表示已经被处理。

3.由于此题中需要计算处理完成需要的时间,所以第二步实现的时候需要做一点处理,不直接把坐标位置加入myq,而是先把同时被腐烂的所有节点位置(可能被相同或不同的已经腐烂的橘子影响)保存在一个队列中,然后再将该队列加入myq,每加入一个队列,times+1。

4.队列为空表示处理完成,腐烂的传播过程完成,橘子已经全部腐烂或者已经没有可以被影响的橘子了。

5.统计处理完成后的grid,如果还存在值为1的节点,则表示存在无法被腐烂的橘子返回-1,否则返回times。

class Solution(object):
    def orangesRotting(self, grid):
        myq = deque()
        times = 0
        directions = [(0,-1),(0,1),(-1,0),(1,0)]
        row = len(grid)
        col = len(grid[0])
        mylist = []
        for i in range(row):
            for j in range(col):
                if grid[i][j] == 2:
                    mylist.append((i,j))
        myq.append(mylist)
        while myq:
            list1 = myq.popleft()
            list2 = []
            while list1:
                posx,posy = list1[0]
                list1.pop(0)
                for dx,dy in directions:
                    nx = posx+dx
                    ny = posy+dy
                    if 0<=nx<row and 0<=ny<col and grid[nx][ny]==1:
                        list2.append((nx,ny))
                        grid[nx][ny]=2
            if list2:
                myq.append(list2)
                times = times+1
        for i in range(row):
            for j in range(col):
                if grid[i][j]==1:
                    return -1
        return times

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值