pastebin

Paste Search Dynamic
Recent pastes
neighbours
  1. using system;
  2. using system.Collections.Generic;
  3.  
  4.  
  5. public class Test
  6. {
  7.         public static void Main()
  8.         {
  9.                 int numRows = 20;
  10.                 int numCols = 22;
  11.                 int[,] A = new int[numRows, numCols];
  12.                
  13.                 //read
  14.                 for (int i = 0; i < numRows; i++)
  15.                 {
  16.                 var numList = new string[numCols];
  17.                 numList = Console.ReadLine().Split();
  18.                 for (var j = 0; j < numCols; j++)
  19.                 {
  20.                         A[i, j] = Convert.ToInt32(numList[j]);    
  21.                 }
  22.                 }
  23.                
  24.                 Solution sol = new Solution();
  25.                 Console.WriteLine(sol.minimumDays(numRows, numCols, A));
  26.         }
  27. }
  28.  
  29. // IMPORT LIBRARY PACKAGES NEEDED BY YOUR PROGRAM
  30. // SOME CLASSES WITHIN A PACKAGE MAY BE RESTRICTED
  31. // DEFINE ANY CLASS AND METHOD NEEDED
  32. // CLASS BEGINS, THIS CLASS IS REQUIRED
  33. public class Solution
  34. {
  35.         // METHOD SIGNATURE BEGINS, THIS METHOD IS REQUIRED
  36.         public int minimumDays(int rows, int columns, int[,] grid)
  37.         {
  38.                 // WRITE YOUR CODE HERE
  39.                 int numDays =0;
  40.                 bool[,] visited =new bool[rows,columns];
  41.                 if(rows == 0 || columns ==0)
  42.                     return -1;
  43.                 Queue<int[]> updatedServers = new Queue<int[]>();
  44.                
  45.                 for(int i =0; i< rows; i++)
  46.                 {
  47.                     for(int j=0; j< columns; j++)
  48.                     {
  49.                         if(grid[i,j] == 0)
  50.                             continue;
  51.                        //Send all updated servers to Queue      
  52.                             updatedServers.Enqueue(new int[]{i,j,numDays});
  53.                     }
  54.                 }
  55.                
  56.                 SearchServers(ref numDays,ref grid,updatedServers,ref visited,rows,columns);
  57.        
  58.  
  59.                    
  60.                 return numDays;
  61.                
  62.         }
  63.         // METHOD SIGNATURE ENDS
  64.        
  65.          private void SearchServers(ref int numDays,ref int[,] grid,Queue<int[]> updatedServers,ref bool[,] visited,int numberRows, int numberColumns)
  66.          {
  67.              List<int[]> neighbours;
  68.              int[] currentServer;
  69.              int row,column;
  70.              while(updatedServers.Count > 0)
  71.              {
  72.                  currentServer = updatedServers.Dequeue();
  73.                  
  74.                  row = currentServer[0];
  75.                  column = currentServer[1];
  76.                  numDays = currentServer[2];
  77.                  if(visited[row,column])
  78.                     continue;
  79.                    
  80.                  visited[row,column] = true;
  81.                  
  82.                  neighbours = GetNeighbours(row,column,grid,numberRows,numberColumns,visited,numDays + 1);
  83.                  
  84.                 if(grid[row,column] == 1 && neighbours.Count>0)
  85.                  {
  86.                      numDays =currentServer[2];
  87.                  }
  88.                  foreach(int[] neighbour in neighbours)
  89.                  {
  90.                      grid[row,column] = 1;
  91.                      updatedServers.Enqueue(neighbour);
  92.                  }
  93.                  
  94.                  
  95.              }
  96.          }
  97.          
  98.          private List<int[]> GetNeighbours(int row, int column, int[,] grid,int numberRows, int numberColumns, bool[,] visited,int numDays)
  99.          {
  100.              List<int[]> neighbours = new List<int[]>();
  101.              
  102.              if(row > 0 && !visited[row - 1,column] && grid[row - 1,column] ==0)
  103.              {
  104.                  neighbours.Add(new int[]{row - 1,column,numDays});
  105.              }
  106.              
  107.              if(row < numberRows -1 && !visited[row+1,column] && grid[row+1,column] ==0)
  108.              {
  109.                  neighbours.Add(new int[]{row + 1,column,numDays});
  110.              }
  111.              
  112.              if(column > 0 && !visited[row,column - 1] && grid[row,column-1] ==0)
  113.              {
  114.                  neighbours.Add(new int[]{row,column -1,numDays});
  115.              }
  116.              
  117.              if(column < numberColumns- 1 && !visited[row,column +1] && grid[row,column +1] ==0)
  118.              {
  119.                  neighbours.Add(new int[]{row,column + 1,numDays});
  120.              }
  121.              
  122.              return neighbours;
  123.          }
  124.  
  125. }
Parsed in 0.036 seconds