Skoro trzymasz sobie tą mapkę w postaci tablicy NxN to utwórz sobie dodatkową tablicę bool NxN (ewentualnie hashtable jak już się z tym spotkałeś) 'explored' i przejdź przez każdy element mapki. Jeśli explored[i,j] = false to wywołaj funkcje CountWhitePlaces(i, j) i jak zwróci coś innego od zera to zwiększ sobie licznik bialych obszarow oraz dodaj do jakiegoś wektora rozmiar obszaru. Funkcja CountWhitePlaces(i, j) powinna zwracać inty. Zastanów się jaki warunek na początku CountWhitePlaces() powinieneś dodać - (czy pole jest białe, czy indeksy nie wykraczaja poza tablice "mapki"). Jeśli warunek zostanie spełniony to oznacz pole jako odwiedzone i wywołaj rekurencyjnie CountWhiteSpaces() (tyle razy ile sąsiadów z odpowiednimi argumentami) + 1, jeśli nie to zwróc zero. Zastanów się na jakie sąsiedne pola możesz przejść z danego kwadraciku (to będe argumenty z jakimi wywołasz rekurecyjnie tą funkcję , tyle ile jest sąsiadów tyle razy musisz wywołać tą funkcję).