题目链接

Rotting Oranges - LeetCode

注意点

解法

解法一:bfs。首先先统计所有新鲜的橘子数目fresh,如果fresh大于0则一直执行bfs。我们只处理昨天刚腐烂的橘子,grid[i][j]的值就表示第几天腐烂的橘子,由于新鲜橘子的值一开始就是2,所以每次修改的时候都要改为day+3day+1+2(2是本来就有的,1表示经过了一天)。如果bfs之后发现新鲜橘子数没有减少则return -1,否则继续下一天的腐烂。

class Solution {
public:
int bfs(vector<vector<int>>& grid,int x,int y,int day)
{
if(x < 0||y < 0||x >= grid.size()||y >= grid[x].size()||grid[x][y] != 1) return 0;
grid[x][y] = day+3;
return 1;
}
int orangesRotting(vector<vector<int>>& grid) {
int i,j,day = 0,fresh = 0;
for(i = 0;i < grid.size();i++)
{
for(j = 0;j < grid[i].size();j++)
{
if(grid[i][j] == 1) fresh += 1;
}
}
while(fresh > 0)
{
int old_fresh = fresh;
for(i = 0;i < grid.size();i++)
{
for(j = 0;j < grid[i].size();j++)
{
if(grid[i][j] == day+2)
{
fresh -= bfs(grid,i,j+1,day)+bfs(grid,i,j-1,day)+bfs(grid,i+1,j,day)+bfs(grid,i-1,j,day);
}
}
}
if(old_fresh == fresh) return -1;
day++;
}
return day;
}
};

小结

  • bfs重要的是找好边界条件以及每次修改的值。

最新文章

  1. GIT FLOW 时序图
  2. git命令使用
  3. 在windows下新建maven项目
  4. Hadoop I/O操作原理整理
  5. GCC编译器和GDB调试器常用选项
  6. POJ 3107
  7. silverlight visifire控件图表制作——silverlight 静态页面xaml
  8. win8.1 安装
  9. java 易错选择题 编辑中
  10. Django auth认证
  11. PGSQL-通过SQL语句来计算两个日期相差的天数
  12. Tomcat启动项目时内存溢出问题如何解决
  13. 将 django部署到 heroku上
  14. 学习笔记52—coverletter
  15. mysql数据类型和使用方法
  16. Spring4.0+quartz2.2.1+memcahce多台nginx实现均衡
  17. System.Threading.Tasks.Task 任务引起的IIS应用程序池崩溃
  18. perl非root用户安装模块
  19. P2878 [USACO07JAN]保护花朵Protecting the Flowers
  20. IO流(一)File类

热门文章

  1. Python之面向对象-反射
  2. SpringCloud版本问题
  3. dvwa——命令注入&amp;文件包含
  4. 第十二次ScrumMeeting博客
  5. OO学习总结与体会
  6. 2017-2018-2 1723 『Java程序设计』课程 结对编程练习_四则运算 第二周
  7. “吃神么,买神么”的第一个Sprint计划(第六天)
  8. Alpha版本冲刺(七)
  9. ASP.NET MVC 3.0 参考源码索引
  10. Windows下编译TensorFlow1.3 C++ library及创建一个简单的TensorFlow C++程序