public class Solution
{
int row = ;
int column = ;
int FreshOrangeCount = ;
int RottenOrangeCount = ;
int Minute = ;
Queue<int[]> Q = new Queue<int[]>();
int[,] TagGrid;
public void BFS(int[][] grid)
{
var rottinglist = new List<int[]>(); while(Q.Count>)
{
while (Q.Count > )
{
var orange = Q.Dequeue(); int i = orange[];
int j = orange[]; int i_new = -;
int j_new = -; //合法范围:up,down,left,right
//未访问的:TagGrid[newi,newj]==0
//新鲜的(grid[i][j]==1)
i_new = i - ;
j_new = j; //up:i-1>=0
if (i_new >= && TagGrid[i_new, j_new] == && grid[i_new][j_new] == )
{
FreshOrangeCount--;
RottenOrangeCount++;
TagGrid[i_new, j_new] = ;//visited
grid[i_new][j_new] = ;//go bad
rottinglist.Add(new int[] { i_new, j_new });
} //down:i+1<=row-1
i_new = i + ;
j_new = j;
if (i_new <= row - && TagGrid[i_new, j_new] == && grid[i_new][j_new] == )
{
FreshOrangeCount--;
RottenOrangeCount++;
TagGrid[i_new, j_new] = ;//visited
grid[i_new][j_new] = ;//go bad
rottinglist.Add(new int[] { i_new, j_new });
} //left:j-1>=0
i_new = i;
j_new = j - ;
if (j_new >= && TagGrid[i_new, j_new] == && grid[i_new][j_new] == )
{
FreshOrangeCount--;
RottenOrangeCount++;
TagGrid[i_new, j_new] = ;//visited
grid[i_new][j_new] = ;//go bad
rottinglist.Add(new int[] { i_new, j_new });
} //right:j+1<=column-1
i_new = i;
j_new = j + ;
if (j_new <= column - && TagGrid[i_new, j_new] == && grid[i_new][j_new] == )
{
FreshOrangeCount--;
RottenOrangeCount++;
TagGrid[i_new, j_new] = ;//visited
grid[i_new][j_new] = ;//go bad
rottinglist.Add(new int[] { i_new, j_new });
} }
if (rottinglist.Any())
{
Minute++;
}
foreach (var l in rottinglist)
{
Q.Enqueue(l);
}
rottinglist.Clear();
}
} public int OrangesRotting(int[][] grid)
{
row = grid.Length;
column = grid[].Length;
TagGrid = new int[row, column]; for (var i = ; i < row; i++)
{
for (var j = ; j < column; j++)
{
TagGrid[i, j] = ;//unvisited
if (grid[i][j] == )
{
FreshOrangeCount++;
}
if (grid[i][j] == )
{
RottenOrangeCount++;
Q.Enqueue(new int[] { i, j });
}
}
} BFS(grid); if (FreshOrangeCount != )
{
return -;
}
else
{
return Minute;
}
}
}

leetcode994的更多相关文章

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

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

随机推荐

  1. 开启和关闭HBase的thrift进程

    开启 $HBASE_HOME/bin/hbase-daemon.sh start thrift [hadoop@bigdatamaster hbase]$ jps 3543 ThriftServer ...

  2. Apollo分布式配置中心部署以及使用

    一.简介Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场 ...

  3. 廖雪峰Java1-3流程控制-5循环

    while循环 while循环首先判断条件: 条件满足时循环:条件不满足时退出循环 如果一开始条件就不满足,一次都不循环.如while false int sum = 0; int n = 1; wh ...

  4. jquery 点击元素以外任意地方隐藏该元素的方法

    文章来源:百度知道 我的思路是给body绑定一个click事件,然后判断当前鼠标点击的区域是当前元素还是元素以外区域,如果点击对象不是当前元素,则隐藏该元素. 假设对象的id为divBtn,则代码如下 ...

  5. C语言强化——链表(2)

    目录 链表的应用: 栈 循环队列 C语言实现动态数组 数组实现定长元素个数层次建树 队列实现不定元素个数层次建树 (*) 栈 栈(链表应用) "stack.h" #include ...

  6. centos7部署openvpn-2.4.6

    一.环境说明 返回主机的IP地址 # ip a | grep "scope global" | awk -F'[ /]+' '{print $3}' | head -1 [root ...

  7. Python函数式编程-高阶函数、匿名函数、装饰器、偏函数

  8. (转)区分LTE,EPS,EPC和SAE

    LTE:Long Term Evolution长期演进,是无线接口部分向4G演进的工作项目. 3GPP:The 3Rd Generation Partnership Project,第三代合作伙伴计划 ...

  9. 【TensorFlow学习笔记 】name_socpe variable_scope

    [引言]TensorFlow中的命名域是非常重要的概念,涉及到参数共享,方便命名参数管理,定义图结构 本文主要介绍name_scope 和 variable_scope,slim包中的arg_scop ...

  10. arcgis连接Oracle数据库

    arcgis连接Oracle数据库 配置声明:本人的电脑是win10 64位,安装的Oracle是oracleR11gr2 64  arcgis版本位10.2 安装是在同一台电脑上. 一.首先是安装O ...