题目:


思路:

每个腐烂的橘子都能将自己上下左右的新鲜橘子传染,像极了现在的肺炎...

如果格子中只有一个腐烂的橘子,那么这便是一个典型的层次遍历,第一个传染多个,称为第二层,第二层传染第三层

但这里会出现初始时便有多个腐烂橘子的情况,其实道理是一样的,将第一层看成多个而不是一个,同样是层次遍历

这里利用双栈来实现层次遍历:

栈A存储第一批腐烂橘子,将第一批腐烂橘子传染的第二批腐烂橘子的位置全部存储至B,后将A清空,随后将B中第二批传染的第三批的位置存储至A,将B清空,直至AB均空

同时记录新鲜橘子的个数num,若最后num>0,说明不能将所有橘子传染,返回-1

代码:

class Solution {
public:
// row: 行, col: 列, res: 结果, num: 新鲜橘子数
int row, col, i, j, res=, num=;
void search(int i, int j, stack<pair<int, int>>& S, vector<vector<int>>& visited,
vector<vector<int>>& grid){
if(i->= && !visited[i-][j] && grid[i-][j]==) {
S.push(make_pair(i-, j));
visited[i-][j]=;
grid[i-][j] = ;
num--;
}
if(j->= && !visited[i][j-] && grid[i][j-]==) {
S.push(make_pair(i, j-));
visited[i][j-]=;
grid[i][j-] = ;
num--;
}
if(i+<row && !visited[i+][j] && grid[i+][j]==) {
S.push(make_pair(i+, j));
visited[i+][j]=;
grid[i+][j] = ;
num--;
}
if(j+<col && !visited[i][j+] && grid[i][j+]==) {
S.push(make_pair(i, j+));
visited[i][j+]=;
grid[i][j+] = ;
num--;
}
}
int orangesRotting(vector<vector<int>>& grid) {
row = grid.size();
col = grid[].size();
vector<vector<int>> visited(row, vector<int>(col, ));
stack<pair<int, int>> A, B;
for(i=; i<row; i++){
for(j=; j<col; j++){
if(grid[i][j]==){
A.push(make_pair(i, j));
visited[i][j]=;
}else if(grid[i][j]==)
num++;  // 记录新鲜橘子的个数
}
}
while(!A.empty() || !B.empty()){
if(A.empty()){
while(!B.empty()){
i=B.top().first;
j=B.top().second;
search(i, j, A, visited, grid);
B.pop();
}
}else{
while(!A.empty()){
i=A.top().first;
j=A.top().second;
search(i, j, B, visited, grid);
A.pop();
}
}
res++;
}
if(num) return -;
return res==?res:res-;
}
};

注:在最后一层时,没有可以传染的新鲜橘子了,但此时某个栈里仍是非空的(最后一层各个位置),所以res会多加一次,在最后减去就好

同时,如果没有橘子或者本身就是腐烂橘子,res值为0,此时不需要减去1

 

[LeetCode] 994. Rotting Oranges 腐烂的橘子的更多相关文章

  1. [leetcode] 994. Rotting Oranges

    题目 You are given an m x n grid where each cell can have one of three values: 0 representing an empty ...

  2. 【Leetcode_easy】994. Rotting Oranges

    problem 994. Rotting Oranges 参考 1. Leetcode_easy_994. Rotting Oranges; 完

  3. 【LeetCode】994. Rotting Oranges 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS 日期 题目地址:https://leetco ...

  4. 【leetcode】994. Rotting Oranges

    题目如下: In a given grid, each cell can have one of three values: the value 0 representing an empty cel ...

  5. Leetcode之广度优先搜索(BFS)专题-994. 腐烂的橘子(Rotting Oranges)

    Leetcode之广度优先搜索(BFS)专题-994. 腐烂的橘子(Rotting Oranges) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ar ...

  6. [Swift]LeetCode994. 腐烂的橘子 | Rotting Oranges

    In a given grid, each cell can have one of three values: the value 0 representing an empty cell; the ...

  7. Leetcode春季打卡第四天:994. 腐烂的橘子

    Leetcode春季打卡第四天:994. 腐烂的橘子 Leetcode春季打卡第四天:994. 腐烂的橘子 思路 思路是采用广度优先搜索,一层一层遍历. 首先先扫描矩阵,将坏橘子放进队列,记录正常橘子 ...

  8. leetcode 994.腐烂的橘子

    题目: 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂 ...

  9. Rotting Oranges - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Rotting Oranges - LeetCode 注意点 解法 解法一:bfs.首先先统计所有新鲜的橘子数目fresh,如果fresh大于0则一直执行 ...

随机推荐

  1. Docker系列六: 使用Docker官方公共仓库和私有仓库

    使用公共仓库 登陆官方网站:https://hub.docker.com/   注册账号和密码 在Docker hub中创建一个资源,  create  respositories,   创建后会提示 ...

  2. 算法之匹配:KMP

    public static int getIndexOf(String str1, String str2) { if (str1 == null || str2 == null || str1.le ...

  3. 吴裕雄--天生自然python学习笔记:pandas模块读取 Data Frame 数据

    读取行数据 读取一个列数据的语法为: 例如,读取所有学生自然科目的成绩 : import pandas as pd datas = [[65,92,78,83,70], [90,72,76,93,56 ...

  4. js求两个数的百分比

    function toPercent(num, total) { return (Math.round(num / total * 10000) / 100.00 + "%");/ ...

  5. z-index优先级小结

    z-index是深度属性,设置元素在z轴上面的堆叠顺序. 强调:z-index必须和定位元素position:absollute|relative|fixed一起使用,否则无效 1.z-index属性 ...

  6. mysql挖掘与探索------第2章 索引1-1

    1索引作用 说起提高数据库性能,索引是最物美价廉的东西了.不用加内存,不用改程序,不用调sql,只要执行个正确的’create index’,查询速度就可能提高百倍千倍,这可真有诱惑力.可是天下没有免 ...

  7. Chrome开发者调试工具

    参考资料 Chrome Console不完全指南 Chrome使用技巧 Chrome开发工具详解 结束语 工欲善其事,必先利其器.

  8. 简单的文件上传服务器(上传到FastDFS服务器)

    现在文件服务器使用越来越多,其中FastDFS文件服务器非常出色,可以支持分布式存储,多文件系统集群和多主机备份 环境中使用的文件服务器为172.16.100.10,其中trackerd服务和stor ...

  9. 关于使用css变量实现主题的切换效果

    现在要实现网页主题的切换成本较小的一种方案就是使用css的变量来实现 HTML 在HTML的body标签上先定义一个id元素属性 <body id="sm-theme"> ...

  10. 关于php自学

    自己本人现在正在自学php有一段时间了,不知道现在的学习状态咋样,在我看来应该属于不算很糟糕,但有点糟糕的状态. 如果算学习自学php的话,现在断断续续应该是有5个月了,按理说是差不多可以做出独立项目 ...