图论之腐烂橘子_BFS(python)

复制代码
from typing import List
from collections import deque
def orangesRotting(grid:List[List[int]])->int:
    t=0
    q=deque()  #队列,将腐烂橘子入队
    fresh=0  #统计新鲜橘子
    rows=len(grid)
    cols=len(grid[0])
    dirs=[(0,1),(0,-1),(1,0),(-1,0)]  #上下左右四个方向

    #先把腐烂橘子入队列,统计新鲜橘子数量
    for i in range(rows):
        for j in range(cols):
            if grid[i][j]==2:
                q.append((i,j))  #腐烂橘子坐标入队
            elif grid[i][j]==1:
                fresh+=1
                
    while q and fresh>0:
        q_len=len(q)
        for _ in range(q_len):
            r0,c0=q.popleft()  #取出腐烂橘子坐标(i,j)
            for k in dirs:  #判断它四个方向的橘子
                r=r0+k[0]
                c=c0+k[1]
                if r<0 or r>=rows or c<0 or c>=cols or grid[r][c]!=1:
                    continue
                grid[r][c]=2  #将新鲜橘子变坏
                q.append((r,c))  #腐烂橘子加入队列
                fresh-=1  #新鲜橘子减一
        t+=1
    return -1 if fresh else t

                
def main():
    grid= [[2,1,1],[1,1,0],[0,1,1]]  #答案输出4
    t=orangesRotting(grid)
    print(t)
    return

if __name__=="__main__":
    main()

思路:多源BFS搜索

1.使用队列,将腐烂橘子入队,每次取出一个腐烂橘子,就判断它的四个方向上的橘子是否是新鲜橘子,若是,则扩散腐烂,然后入队列,新鲜橘子数量减一。

2.如果最后还有新鲜橘子,则返回-1。

相关推荐
月亮!2 小时前
6大AI测试工具极限压测:微软TuringAI竟率先崩溃
java·人工智能·python·测试工具·microsoft·云原生·压力测试
YJlio2 小时前
《Windows 11 从入门到精通》读书笔记 1.4.9:全新的微软应用商店——“库 + 多设备同步”把它从鸡肋变成刚需入口
c语言·网络·python·数码相机·microsoft·ios·iphone
郝学胜-神的一滴2 小时前
Pytorch张量核心运算精讲:从类型转换到数值操作全解析
开发语言·人工智能·pytorch·python·深度学习·程序人生·机器学习
E_ICEBLUE2 小时前
在 Python 中转换 XML 为 PDF 文档:基础转换与转换设置
xml·python·pdf
YJlio2 小时前
《Windows 11 从入门到精通》读书笔记 1.4.10:集成的微软 Teams——办公与社交的无缝衔接
c语言·网络·python·数码相机·ios·django·iphone
Sgf2272 小时前
第7章 文件操作
服务器·开发语言·数据库·python
进击的小头2 小时前
第19篇:多个PI控制器串联控制系统设计与参数整定调试实战
python·算法
章鱼丸-2 小时前
DAY36 复习日@浙大疏锦行
python
机器学习之心2 小时前
基于GRU与Informer混合架构的时间序列预测,主要用于处理多变量时间序列的短期预测任务,已更新到Python机器学习/深度学习程序全家桶
python·深度学习·gru