Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.89 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace szigetek
  5. {
  6.     class Program
  7.     {
  8.         private static int[,] matrix;
  9.         private static List<int[]> visited;
  10.         private static Queue<int[]> neighbours;
  11.         private static int rowNum;
  12.         private static int columnNum;
  13.  
  14.         static void ReadMatrix(){
  15.             string s = Console.ReadLine();
  16.             rowNum = int.Parse(s.Split(' ')[0]);
  17.             columnNum = int.Parse(s.Split(' ')[1]);
  18.             matrix = new int[rowNum,columnNum];
  19.             for(int i = 0; i<rowNum; i++){
  20.                 char[] l = Console.ReadLine().ToCharArray();
  21.                 for(int j = 0; j<columnNum; j++){
  22.                     if(l[j] == 'Z'){
  23.                         matrix[i,j] = 1;
  24.                     } else {
  25.                         matrix[i,j] = 0;
  26.                     }
  27.                 }
  28.             }
  29.         }
  30.         static bool Contain(int[] Array){
  31.             bool t = true;
  32.                         foreach(var a in neighbours){
  33.                             if(a[0]==Array[0] && a[1]==Array[1]){
  34.                                 t = false;
  35.                             }
  36.                         }
  37.                         foreach(var a in visited){
  38.                             if(a[0]==Array[0] && a[1]==Array[1]){
  39.                                 t = false;
  40.                             }
  41.                         }
  42.             if(t){
  43.                 return true;
  44.             } else {
  45.                 return false;
  46.             }
  47.         }
  48.         static void ProcessCoordinate(int i, int j){
  49.             int[] coordinateArray = new int[]{i,j};
  50.             if(i<rowNum && i>=0 && j<columnNum && j>=0){
  51.                 if(matrix[i,j]==1 && Contain(coordinateArray)){
  52.                     neighbours.Enqueue(new int[]{i,j});
  53.                 }
  54.             }
  55.         }
  56.         static void ProcessMatrix(int i, int j){
  57.             if(matrix[i,j]==1){
  58.                 visited.Add(new int[]{i,j});
  59.                 matrix[i,j] = 2;
  60.                 ProcessCoordinate(i+1,j);
  61.                 ProcessCoordinate(i-1,j);
  62.                 ProcessCoordinate(i,j+1);
  63.                 ProcessCoordinate(i,j-1);
  64.             }
  65.             int[] tmp;
  66.             if(neighbours.Count>0){
  67.                 tmp = neighbours.Dequeue();
  68.                 ProcessMatrix(tmp[0],tmp[1]);
  69.             }
  70.         }
  71.         static void Main(string[] args)
  72.         {
  73.             neighbours = new Queue<int[]>();
  74.             visited = new List<int[]>();
  75.             int count = 0;
  76.             ReadMatrix();
  77.             for(int i = 0; i<rowNum; i++){
  78.                 for(int j = 0; j<columnNum; j++){
  79.                     if(matrix[i,j]==1){
  80.                         ProcessMatrix(i,j);
  81.                         count++;
  82.                     }
  83.                 }
  84.             }
  85.             System.Console.WriteLine(count);
  86.         }
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement