zoukankan      html  css  js  c++  java
  • leetcode994

      1 public class Solution
      2     {
      3         int row = 0;
      4         int column = 0;
      5         int FreshOrangeCount = 0;
      6         int RottenOrangeCount = 0;
      7         int Minute = 0;
      8         Queue<int[]> Q = new Queue<int[]>();
      9         int[,] TagGrid;
     10         public void BFS(int[][] grid)
     11         {
     12             var rottinglist = new List<int[]>();
     13 
     14             while(Q.Count>0)
     15             {
     16                 while (Q.Count > 0)
     17                 {
     18                     var orange = Q.Dequeue();
     19 
     20                     int i = orange[0];
     21                     int j = orange[1];
     22 
     23                     int i_new = -1;
     24                     int j_new = -1;
     25 
     26                     //合法范围:up,down,left,right
     27                     //未访问的:TagGrid[newi,newj]==0
     28                     //新鲜的(grid[i][j]==1)
     29                     i_new = i - 1;
     30                     j_new = j;
     31 
     32                     //up:i-1>=0
     33                     if (i_new >= 0 && TagGrid[i_new, j_new] == 0 && grid[i_new][j_new] == 1)
     34                     {
     35                         FreshOrangeCount--;
     36                         RottenOrangeCount++;
     37                         TagGrid[i_new, j_new] = 1;//visited
     38                         grid[i_new][j_new] = 2;//go bad
     39                         rottinglist.Add(new int[] { i_new, j_new });
     40                     }
     41 
     42                     //down:i+1<=row-1
     43                     i_new = i + 1;
     44                     j_new = j;
     45                     if (i_new <= row - 1 && TagGrid[i_new, j_new] == 0 && grid[i_new][j_new] == 1)
     46                     {
     47                         FreshOrangeCount--;
     48                         RottenOrangeCount++;
     49                         TagGrid[i_new, j_new] = 1;//visited
     50                         grid[i_new][j_new] = 2;//go bad
     51                         rottinglist.Add(new int[] { i_new, j_new });
     52                     }
     53 
     54                     //left:j-1>=0
     55                     i_new = i;
     56                     j_new = j - 1;
     57                     if (j_new >= 0 && TagGrid[i_new, j_new] == 0 && grid[i_new][j_new] == 1)
     58                     {
     59                         FreshOrangeCount--;
     60                         RottenOrangeCount++;
     61                         TagGrid[i_new, j_new] = 1;//visited
     62                         grid[i_new][j_new] = 2;//go bad
     63                         rottinglist.Add(new int[] { i_new, j_new });
     64                     }
     65 
     66                     //right:j+1<=column-1
     67                     i_new = i;
     68                     j_new = j + 1;
     69                     if (j_new <= column - 1 && TagGrid[i_new, j_new] == 0 && grid[i_new][j_new] == 1)
     70                     {
     71                         FreshOrangeCount--;
     72                         RottenOrangeCount++;
     73                         TagGrid[i_new, j_new] = 1;//visited
     74                         grid[i_new][j_new] = 2;//go bad
     75                         rottinglist.Add(new int[] { i_new, j_new });
     76                     }
     77 
     78                 }
     79                 if (rottinglist.Any())
     80                 {
     81                     Minute++;
     82                 }
     83                 foreach (var l in rottinglist)
     84                 {
     85                     Q.Enqueue(l);
     86                 }
     87                 rottinglist.Clear();
     88             }
     89         }
     90 
     91         public int OrangesRotting(int[][] grid)
     92         {
     93             row = grid.Length;
     94             column = grid[0].Length;
     95             TagGrid = new int[row, column];
     96 
     97             for (var i = 0; i < row; i++)
     98             {
     99                 for (var j = 0; j < column; j++)
    100                 {
    101                     TagGrid[i, j] = 0;//unvisited
    102                     if (grid[i][j] == 1)
    103                     {
    104                         FreshOrangeCount++;
    105                     }
    106                     if (grid[i][j] == 2)
    107                     {
    108                         RottenOrangeCount++;
    109                         Q.Enqueue(new int[] { i, j });
    110                     }
    111                 }
    112             }
    113 
    114             BFS(grid);
    115 
    116             if (FreshOrangeCount != 0)
    117             {
    118                 return -1;
    119             }
    120             else
    121             {
    122                 return Minute;
    123             }
    124         }
    125     }
  • 相关阅读:
    【UNR #1】火车管理
    NOIP2018保卫王国
    [SCOI2015]国旗计划[Wf2014]Surveillance
    [TJOI2015]线性代数(最小割)
    [AH2017/HNOI2017]礼物(FFT)
    BZOJ5093图的价值(斯特林数)
    [NOI2018]你的名字(后缀自动机+线段树)
    [SDOI2015]序列统计(多项式快速幂)
    [NOI2014]购票(斜率优化+线段树)
    [CQOI2017]小Q的表格(数论+分块)
  • 原文地址:https://www.cnblogs.com/asenyang/p/10391257.html
Copyright © 2011-2022 走看看