public static void Main()
char[,] arr = new char[,] {
{'O','O','O','O','X','X','O'},
{'O','X','O','X','O','O','X'},
{'X','X','X','X','O','X','O'},
{'O','X','X','X','O','O','O'}
Console.Write(GetAdjacentX(arr));
public static int GetAdjacentX(char[,] arr)
int r = arr.GetLength(0), c = arr.GetLength(1);
bool[,] visited = new bool[r, c];
for(int i = 0; i < r; i++)
for(int j = 0; j < c; j++)
for(int i = 0; i < r; i++)
for(int j = 0; j < c; j++)
if(arr[i, j] == 'X' && !visited[i,j])
VisitAdjacents(arr, i, j, visited);
private static void VisitAdjacents(char[,] arr, int r, int c, bool[,] visited)
if(r < 0 || c < 0 || r > arr.GetLength(0) - 1 || c > arr.GetLength(1) - 1 || visited[r,c])
VisitAdjacents(arr, r, c + 1, visited);
VisitAdjacents(arr, r, c - 1, visited);
VisitAdjacents(arr, r - 1, c, visited);
VisitAdjacents(arr, r + 1, c, visited);
public static void FloodFill(int[,] arr, int x, int y, int newC)
Util(arr, x, y, arr[x,y], newC);
for(int i = 0; i < arr.GetLength(0); i++)
for(int j = 0; j < arr.GetLength(1); j++)
Console.Write(arr[i,j] + ", ");
private static void Util(int[,] arr, int r, int c, int prevC, int newC)
if(r > arr.GetLength(0) - 1 || c > arr.GetLength(1) - 1 || r < 0 || c < 0)
Util(arr, r-1, c, prevC, newC);
Util(arr, r+1, c, prevC, newC);
Util(arr, r, c - 1, prevC, newC);
Util(arr, r, c + 1, prevC, newC);