Searching for the biggest area inside 2D matrix
A BFS combined with floodfill should be enough.

Basically, you do the following:


Iterate until you find the first X
Run a BFS on it and change all pixels to visisted = True. Also keep track if you happen to reach the boundary or fulfill any other criterion s.t. it is disqualified
If it is not disqualified, save its size as the current max-size
Iterate further until you find the next unvisited pixel and redo steps 2-4. Keep track of the largest size found.
If you need the original array, change back the visisted state of each pixel in a final iteration.


Overall runtime: Linear, because you change each element at most twice (once to visisted and once back), and also consider only a constant number of neighbors for each element (8).