首页 > 其他分享 >【BFS】腐烂的橘子

【BFS】腐烂的橘子

时间:2024-04-29 12:22:06浏览次数:26  
标签:腐烂 queue oranges BFS grid dx dy 橘子 size

https://leetcode.cn/problems/rotting-oranges/description/?envType=study-plan-v2&envId=top-100-liked

  1. 从一个点向上下左右移动并且判断是否边界可以用
for dx, dy in [(1, 0), (-1, 0), (0, 1), (0, -1)]:
  nx = x + dx
  ny = y + dy
  if 0 <= nx < rows and 0 <= ny < cols and grid[nx][ny] == 1:
  1. BFS常规技巧:多源广度优先 = 同层节点遍历 = 先获取队列size,然后弹出size个元素,就可以恰好遍历完这个批次的队列(哎呀好久没做题都忘光了XD,连这个都要写)
size = len(queue)
for _ in range(size):
    x, y = queue.popleft()
class Solution:
    def orangesRotting(self, grid: List[List[int]]) -> int:
        rows = len(grid)
        cols = len(grid[0])

        queue = deque()
        fresh_oranges = 0

        for i in range(rows):
            for j in range(cols):
                if grid[i][j] == 2:
                    queue.append((i, j))
                elif grid[i][j] == 1:
                    fresh_oranges += 1

       minutes = 0
        if fresh_oranges == 0:
            return 0

        while queue:
            size = len(queue)

            for _ in range(size):
                x, y = queue.popleft()

                for dx, dy in [(1, 0), (-1, 0), (0, 1), (0, -1)]:
                    nx = x + dx
                    ny = y + dy

                    if 0 <= nx < rows and 0 <= ny < cols and grid[nx][ny] == 1:
                        grid[nx][ny] = 2
                        queue.append((nx, ny))
                        fresh_oranges -= 1
            if queue:
                minutes += 1


        return -1 if fresh_oranges != 0 else minutes

标签:腐烂,queue,oranges,BFS,grid,dx,dy,橘子,size
From: https://www.cnblogs.com/peterzh/p/18165404

相关文章

  • Manthan, Codefest 18 (rated, Div. 1 + Div. 2) D. Valid BFS?
    题意:给一个树和一个bfs序,并保证从节点1出发,判bfs序是否合法。思路:双指针,在bfs序上从左往右遍历。慢指针指向当前节点u,快指针指向当前节点应该访问的节点的位置。然后设两个集合,一个集合存储在当前节点上应该访问的节点,另一个存储在当前节点上实际访问的节点,然后遍历即可。总结:......
  • vector开二维数组&&深搜迷宫问题&&BFS
    vector<vector>vis(N+10(一维的大小),vector(N+10(二维的大小),0(初始化赋值)),step(N+10,vector(N+10,0));vector<vector>vis(N+10,vector(N+10)),step(N+10,vector(N+10));开数组大小一定要超过题目本身大小;#include<bits/stdc++.h>usingnamespacestd;#defineintl......
  • 数据结构与算法学习(1)——BFS(广度优先搜索)
    BFS基础BFS会从根节点开始搜索,在每一个路口面临分叉的时候,先把每个岔路记录下来,然后再去一个一个的往前走一步。节点进行广度优先搜索的顺序题目PS:下列题目均来自leetcode中灵神题单1311.获取你好友已观看的视频......
  • 【BFS】abc351D Grid and Magnet 题解
    传送门D-GridandMagnet题意:给定h行w列的图表,其中部分位置有磁铁,人物会在磁铁四周((x+1,y),(x-1,y),(x,y+1),(x,y-1))停止,某点的自由度定义为从该点出发最多可到的方块数目可以走重复路前置例题:求连通块大小洛谷P1141思路:由自由度的定义联想到连通块的大小,从而决定用BFS......
  • 抖音的倒水问题, 计算机bfs求解
    暴力求解bfs方法.并且找到的一定是最少步骤问题:抖音上面又来了一个倒水游戏例子:3个杯子,容量12,9,5上来12是满的.然后都没有刻度只能倒到一个满这种倒法,然后最后希望倒出2个6ml的.#抖音上面又来了一个倒水游戏#例子:3个杯子,容量12,9,5上来12是满的.然......
  • 528. 奶酪(并查集orBFS)
    题面如下:https://www.acwing.com/problem/content/530/大致思路是:合并所有连接的空洞,判断下表面的空洞和上表面的空洞是否是同一集合集合#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<cmath>usingnamespacestd;constintN......
  • 动态规划、回溯、BFS、二分、滑动窗口总结
    动态规划动态规划的核心问题:重叠子问题,最优子结构,状态转移方程动态规划与记忆递归的区别:记忆递归为自顶而上的递归剪枝,动态规划为自底向上的循环迭代;正确的状态转移方程+dp[]数组:确定状态(原问题和子问题中变化的变量)->确定dp数组的定义dp[i]->确定当前状态的'选择'并确定......
  • 蓝桥杯-长草(BFS)
    0.题目【问题描述】小明有一块空地,他将这块空地划分为n行m列的小块,每行和每列的长度都为1。小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。这些草长得很快,每个月,草都会向外长出一些,如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,这四小块......
  • 广度优先搜索 Breadth-First Search(BFS)
    问题引入​对于每一个问题,都会有相应的解,在之前的学习中求解的过程,都是以一条条线的形式产生可能解进行筛选验证是否正确。本章节我们来考虑另外一种思路,类似于洪水爆发,从一个源头开始逐渐蔓延开来,直到所有可达的区域都被洪水淹没,所以我们也把这种算法称之为洪泛法。洪泛法会......
  • 蓝桥杯:七步诗 ← bfs
    【题目来源】https://www.lanqiao.cn/problems/3447/learning/【题目描述】煮豆燃豆苴,豆在釜中泣。本是同根生,相煎何太急?---曹植所以,这道题目关乎豆子!话说赤壁之战结束后,曹操的船舰被刘备烧了,引领军队从华容道撤退,路上遇到了泥泞,道路不通畅,又刮起了大风,没办法,只好让羸弱的......