using System.Collections;
using System.Collections.Generic;
public static void Main()
int[,] map = new int[4,5] { { 0, 0, 1, 1, 0 },
Console.WriteLine(BFSgetBiggestRegion(map));
public static int BFSgetBiggestRegion(int[,] matrix)
for (int row = 0; row < matrix.GetLength(0); row++)
for (int column = 0; column < matrix.GetLength(1); column++)
if (matrix[row, column] == 1)
int size = BFSgetRegionSize(matrix, row, column);
maxRegion = Math.Max(size, maxRegion);
public static Queue<Tuple<int, int>> coordinates = new Queue<Tuple<int, int>>();
public static HashSet<Tuple<int, int>> visited = new HashSet<Tuple<int, int>>();
private static int BFSgetRegionSize(int[,] matrix, int row, int column)
if (row < 0 || column < 0 || row >= matrix.GetLength(0) || column >= matrix.GetLength(1))
if (matrix[row, column] == 0 || visited.Contains(new Tuple<int, int>(row, column)))
visited.Add(new Tuple<int, int>(row, column));
for (int r = row - 1; r <= row + 1; r++)
for (int c = column - 1; c <= column + 1; c++)
if ((r != row || c != column) && !visited.Contains(new Tuple<int, int>(r, c)))
coordinates.Enqueue(new Tuple<int, int>(r, c));
while (coordinates.Any())
var point = coordinates.Dequeue();
size += BFSgetRegionSize(matrix, point.Item1, point.Item2);