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

相关推荐
m沐沐1 分钟前
【深度学习】PyTorch CNN 手写数字识别(卷积神经网络)
人工智能·pytorch·python·深度学习·机器学习·pycharm·cnn
garmin Chen2 分钟前
Prompt工程入门:让AI按你的要求工作(3)--Prompt工程与提示词安全评测概述
java·人工智能·python·安全·prompt
nanawinona5 分钟前
只会用 K 线算期货信号下一步怎么接到交易
python·区块链
叫我:松哥14 分钟前
基于卷积神经网络的静态手势语识别算法,在测试集上的识别准确率达到97.5%
人工智能·python·深度学习·神经网络·算法·cnn
不考研当牛马16 分钟前
Django 框架 深度学习 第二课程
后端·python·django
Dust-Chasing23 分钟前
Claude Code源码剖析 - ShellTool与真实动作
人工智能·python·ai
仙俊红32 分钟前
Java JUC:CompletableFuture 详解,多个任务并行执行并等待全部完成
java·python·spring
学习3人组35 分钟前
Python 评论朴素贝叶斯文本情感分析示例
人工智能·python·机器学习
用户3379225456839 分钟前
A2A Python SDK 源码架构解读:一个请求是如何被处理的
python
2401_8856651939 分钟前
从零搭建卷积神经网络:基于PyTorch实现MNIST手写数字分类
pytorch·python·神经网络·算法·机器学习·分类·cnn