题目:

在给定的网格中,每个单元格可以有以下三个值之一:

  • 值 0 代表空单元格;
  • 值 1 代表新鲜橘子;
  • 值 2 代表腐烂的橘子。

每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。

返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1

分析:

最近在看广度优先搜素的题目,这个是比较简单基础的题了。

腐烂的橘子会把靠近他的新鲜的橘子腐蚀,那么就是只要从所有坏的橘子的地方一层一层往外遍历就可以了。

代码:

 //5ms 97%
class Solution {
public int orangesRotting(int[][] grid) {
Queue<int[]> q=new LinkedList<>();
int h=grid.length,w=grid[0].length,time=0;
for(int n=0;n<h;++n)
for(int m=0;m<w;++m)
if(grid[n][m]==2) {
int[] po= {0,n,m};
q.add(po);
}
while(!q.isEmpty()) {
int[] g=q.poll();
time=time>g[0]?time:g[0];
if(g[1]+1<h&&grid[g[1]+1][g[2]]==1) {
grid[g[1]+1][g[2]]=2;
int[] po= {g[0]+1,g[1]+1,g[2]};
q.add(po);
}
if(g[1]-1>=0&&grid[g[1]-1][g[2]]==1) {
grid[g[1]-1][g[2]]=2;
int[] po= {g[0]+1,g[1]-1,g[2]};
q.add(po);
}
if(g[2]-1>=0&&grid[g[1]][g[2]-1]==1) {
grid[g[1]][g[2]-1]=2;
int[] po= {g[0]+1,g[1],g[2]-1};
q.add(po);
}
if(g[2]+1<w&&grid[g[1]][g[2]+1]==1) {
grid[g[1]][g[2]+1]=2;
int[] po= {g[0]+1,g[1],g[2]+1};
q.add(po);
}
}
for(int n=0;n<h;++n)
for(int m=0;m<w;++m)
if(grid[n][m]==1)
return -1;
return time;
}
}

最新文章

  1. Kafka的安装和部署及测试
  2. android布局学习-使用FrameLayout和LinearLayout制作QQ空间底部导航栏
  3. Web前端知识技能大汇总
  4. Caffe学习系列(16):caffemodel可视化
  5. Unity3d 适配机型
  6. Oracle 物理DG切换
  7. oracle 监控执行的sql语句
  8. 驱动04.平台总线驱动模型——点亮LED灯
  9. 过滤字符串html标签方法
  10. JFrame图形界面 ----绝对布局和按钮
  11. 【mybatis】-- springboot整合mybatis
  12. Google Analytics电子商务篇(Universal版)
  13. RE validator
  14. 传输层两大协议:TCP和UDP
  15. ncnn编译安装-20190415
  16. Abstract Factory 抽象工厂
  17. Qt如何获得窗口的几何信息(Window Geometry)
  18. Swiper正方体,左右翻转轮播图
  19. 利用aop完成功能权限验证遇到的问题
  20. CSS3不遥远,几个特性你要知道

热门文章

  1. 【测试】性能测试及性能测试工具Loadrunner
  2. 国产超低功耗蓝牙5.0 PHY6202替换NRF51822
  3. 小程序地图开发周边信息POI展示为列表
  4. 《新标准C++程序设计》3.9-3.10(C++学习笔记11)
  5. HDU 4921 Map DFS+状态压缩+乘法计数
  6. Node.js 文件系统模块
  7. SpringMVC:提交日期类型报400错误解决方法
  8. HDU - 1114 Piggy-Bank(完全背包讲解)
  9. 大数据高可用集群环境安装与配置(05)——安装zookeeper集群
  10. errors exist in required project(s) xxx proceed with launch?