图论之腐烂橘子_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。

相关推荐
小七-七牛开发者4 分钟前
让 Go 走得更远:用 LLGo 打通 Go 与 C/C++/Python 生态
python·编程·编译器·llvm·llgo
CyrusYiVPP1 小时前
实测 Ollama 本地部署:我用 Python 搓了个离线问答机器人,Qwen4 27B 一到换个模型名就能用
人工智能·python
2601_967980112 小时前
Python中flatten( )函数及函数用法详解
python·numpy·数组操作·flatten函数·列表处理
xbzb2 小时前
自定义 yum 软件源:Linux 上 createrepo,Windows 上纯 Python 也能造
linux·运维·windows·python·yum·createrepo
合尘猫5 小时前
图片表格变结构化数据:OCR 后的三个坑
python·ocr
小小张说故事5 小时前
Python 里弱引用到底弱在哪:拆开 weakref.ref、回调陷阱和 WeakValueDictionary
python
用户019027581616 小时前
用 DuckDB 存查 A 股 K 线:零服务、SQL 直接分析
python
程序员果子7 小时前
本体构建方法
人工智能·python·知识图谱·agent框架·本体
天天被压力8 小时前
【A股分钟级高频数据完全手册 #11】券商实时行情数据接口:实时交易(券商源)接入与字段
java·人工智能·python
总裁余(余登武)8 小时前
【python项目】:1操作EXCEl自动化开发
python·自动化·excel