Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace szigetek
- {
- class Program
- {
- private static int[,] matrix;
- private static List<int[]> visited;
- private static Queue<int[]> neighbours;
- private static int rowNum;
- private static int columnNum;
- static void ReadMatrix(){
- string s = Console.ReadLine();
- rowNum = int.Parse(s.Split(' ')[0]);
- columnNum = int.Parse(s.Split(' ')[1]);
- matrix = new int[rowNum,columnNum];
- for(int i = 0; i<rowNum; i++){
- char[] l = Console.ReadLine().ToCharArray();
- for(int j = 0; j<columnNum; j++){
- if(l[j] == 'Z'){
- matrix[i,j] = 1;
- } else {
- matrix[i,j] = 0;
- }
- }
- }
- }
- static bool Contain(int[] Array){
- bool t = true;
- foreach(var a in neighbours){
- if(a[0]==Array[0] && a[1]==Array[1]){
- t = false;
- }
- }
- foreach(var a in visited){
- if(a[0]==Array[0] && a[1]==Array[1]){
- t = false;
- }
- }
- if(t){
- return true;
- } else {
- return false;
- }
- }
- static void ProcessCoordinate(int i, int j){
- int[] coordinateArray = new int[]{i,j};
- if(i<rowNum && i>=0 && j<columnNum && j>=0){
- if(matrix[i,j]==1 && Contain(coordinateArray)){
- neighbours.Enqueue(new int[]{i,j});
- }
- }
- }
- static void ProcessMatrix(int i, int j){
- if(matrix[i,j]==1){
- visited.Add(new int[]{i,j});
- matrix[i,j] = 2;
- ProcessCoordinate(i+1,j);
- ProcessCoordinate(i-1,j);
- ProcessCoordinate(i,j+1);
- ProcessCoordinate(i,j-1);
- }
- int[] tmp;
- if(neighbours.Count>0){
- tmp = neighbours.Dequeue();
- ProcessMatrix(tmp[0],tmp[1]);
- }
- }
- static void Main(string[] args)
- {
- neighbours = new Queue<int[]>();
- visited = new List<int[]>();
- int count = 0;
- ReadMatrix();
- for(int i = 0; i<rowNum; i++){
- for(int j = 0; j<columnNum; j++){
- if(matrix[i,j]==1){
- ProcessMatrix(i,j);
- count++;
- }
- }
- }
- System.Console.WriteLine(count);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement