当前位置: 首页 > wzjs >正文

深圳网站开发平台百度云搜索

深圳网站开发平台,百度云搜索,网站ip过万,南宁网站建设智能优化题目 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单元格中…

题目

在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:
值 0 代表空单元格;
值 1 代表新鲜橘子;
值 2 代表腐烂的橘子。
每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。
返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。

一、代码实现(多源BFS)

func orangesRotting(grid [][]int) int {m, n := len(grid), len(grid[0])queue := [][2]int{}fresh := 0// 初始化队列并统计新鲜橘子数量for i := 0; i < m; i++ {for j := 0; j < n; j++ {if grid[i][j] == 2 {queue = append(queue, [2]int{i, j})} else if grid[i][j] == 1 {fresh++}}}if fresh == 0 {return 0}dirs := [4][2]int{{-1,0}, {1,0}, {0,-1}, {0,1}}time := 0for len(queue) > 0 {levelSize := len(queue)levelSpread := falsefor i := 0; i < levelSize; i++ {cell := queue[0]queue = queue[1:]for _, d := range dirs {x, y := cell[0]+d[0], cell[1]+d[1]if x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == 1 {grid[x][y] = 2fresh--queue = append(queue, [2]int{x, y})levelSpread = true}}}if levelSpread {time++}}if fresh > 0 {return -1}return time
}

二、算法分析

1. 核心思路
  • 多源广度优先搜索:初始将所有腐烂橘子入队,同时进行层级扩散
  • 层级时间统计:每完成一轮队列处理代表经过1分钟
  • 新鲜橘子计数:实时更新剩余新鲜橘子数量,判断终止条件
2. 关键步骤
  1. 初始化阶段

    • 遍历网格收集腐烂橘子坐标
    • 统计新鲜橘子总数fresh
    • 特判无新鲜橘子时直接返回0
  2. BFS扩散过程

    • 每次处理当前队列的所有节点(对应同一时间层级)
    • 四个方向扩散,感染相邻新鲜橘子
    • 维护levelSpread标志判断是否实际发生扩散
  3. 终止条件判断

    • 最终检查fresh是否为0
    • 剩余新鲜橘子说明存在隔离区域
3. 复杂度
指标说明
时间复杂度O(m*n)每个节点最多入队一次
空间复杂度O(m*n)队列最大存储所有腐烂橘子坐标

三、图解示例

在这里插入图片描述

四、边界条件与扩展

1. 特殊场景验证
  • 全腐烂初始状态:返回0(如示例3)
  • 隔离区域存在:返回-1(如示例2的角落橘子)
  • 多源同时扩散:不同腐烂源并行加速感染
2. 扩展应用
  • 动态障碍物:支持实时更新墙的位置重新计算
  • 三维空间扩展:增加z轴方向扩散维度
  • 感染概率模型:每次感染存在成功概率
3. 多语言实现
import java.util.LinkedList;
import java.util.Queue;public class Solution {public int orangesRotting(int[][] grid) {if (grid == null || grid.length == 0) {return -1;}int rows = grid.length;int cols = grid[0].length;int fresh = 0;Queue<int[]> queue = new LinkedList<>();// 初始化队列和新鲜橘子计数for (int r = 0; r < rows; r++) {for (int c = 0; c < cols; c++) {if (grid[r][c] == 2) {queue.offer(new int[]{r, c});} else if (grid[r][c] == 1) {fresh++;}}}// 如果没有新鲜橘子,直接返回0if (fresh == 0) {return 0;}int[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};int minutes = 0;while (!queue.isEmpty() && fresh > 0) {int levelSize = queue.size();for (int i = 0; i < levelSize; i++) {int[] current = queue.poll();for (int[] dir : directions) {int nr = current[0] + dir[0];int nc = current[1] + dir[1];if (nr >= 0 && nr < rows && nc >= 0 && nc < cols && grid[nr][nc] == 1) {grid[nr][nc] = 2;fresh--;queue.offer(new int[]{nr, nc});}}}if (!queue.isEmpty()) {minutes++;}}return fresh == 0 ? minutes : -1;}
}
from collections import dequedef orangesRotting(grid):if not grid:return -1rows = len(grid)cols = len(grid[0])fresh = 0queue = deque()# 初始化队列和新鲜橘子计数for r in range(rows):for c in range(cols):if grid[r][c] == 2:queue.append((r, c))elif grid[r][c] == 1:fresh += 1# 如果没有新鲜橘子,直接返回0if fresh == 0:return 0directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]minutes = 0while queue and fresh > 0:# 处理当前层的所有橘子level_size = len(queue)for _ in range(level_size):r, c = queue.popleft()for dr, dc in directions:nr, nc = r + dr, c + dcif 0 <= nr < rows and 0 <= nc < cols and grid[nr][nc] == 1:grid[nr][nc] = 2fresh -= 1queue.append((nr, nc))if queue:  # 只有这一层有橘子腐烂时才增加时间minutes += 1return minutes if fresh == 0 else -1

五、总结与优化

1. 算法对比
方法优势适用场景
BFS保证最短时间常规网格扩散问题
DFS空间效率高路径存在性验证
并查集动态连接关系维护需要持续更新感染关系
2. 工程优化
  • 层级标记优化:使用轮次标记替代队列长度计算
  • 内存压缩存储:用位运算记录感染状态
  • 并行计算:多线程处理不同腐烂源扩散
3. 扩展方向
  • 权重扩散:不同方向感染速度不同
  • 抗感染机制:部分橘子具有抗感染能力
  • 可视化模拟:生成感染过程动画演示
http://www.dtcms.com/wzjs/129350.html

相关文章:

  • 昆明做网站建设价位网络推广外包想手机蛙软件
  • 易语言做返利网站seo关键词优化软件合作
  • 谷歌seo难吗seo01
  • 互联网网站建设公司上海培训机构白名单
  • python 网站开发 linuxseo是谁
  • 广州品牌网站建设 优美优化大师官网登录入口
  • 网站建设原网络营销产品的首选产品
  • 设计方案网站百度号码认证平台
  • 西安市住房和城乡建设局网站网络暴力事件
  • 网站建设理念网站软文代写
  • 做株洲网站需要多少钱互联网推广方案怎么写
  • 初创公司网站设计苏州外链网站推荐
  • 买国外空间哪个网站好网页模板源代码
  • 建设银行手机银行网站用户名是什么原因长沙搜索排名优化公司
  • 嘉兴建设公司网站互联网营销师课程
  • 公司网站建设推荐乐云seo宣传推广方案
  • wordpress 宅男猫网站学校网站建设
  • 如何自己建网站服务器快速排名软件seo系统
  • 青少年活动中心网站建设依据网络营销渠道名词解释
  • 外贸怎么做北京搜索引擎关键词优化
  • 网站 功能建设上 不足网站建设报价明细表
  • 建设银行网站怎么登陆不广州百度seo代理
  • 贵阳市乌当区住房与城乡建设局网站厦门人才网官网招聘
  • 广东做网站公司steam交易链接在哪里
  • e4a做网站软件百度快速排名 搜
  • 湖南手机版建站系统哪个好百度目前的推广方法
  • 网站联系方式修改最大免费广告发布平台
  • 网站建设知名企业浏阳廖主任打人
  • 产品外包装设计网站营销方式和渠道
  • 德阳网站制作公司公司网站搭建流程