2012-10-15 12 views
8

Oto przykład (licząc czarnych):Jak liczyć grupy tych samych komórek w tablicy 2d?

wejściowe:

enter image description here

wyjściowa:

5 4 // 5 groups (4 squares each) 
1 1 // 1 group containing 1 square 

Na razie nie mogę wymyślić nic lepszego niż bolesne dla iteracja. Czy byłoby możliwe uzyskanie tych grup w sposób rekurencyjny? Dzięki

+0

Nie widzę wejścia! – elyashiv

+1

Co liczy się jako "grupa"? Prostokąty? Ciągłe czarne obszary? – phimuemue

+0

cóż, zdjęcie jest wprowadzeniem tablicy 2d, grupa czarnych obszarów to bloki czarnych kwadratów leżących obok siebie (nie liczyć diagonalnie) – Patryk

Odpowiedz

2

Ustaw wszystkie czarne kwadraty jako węzły. Połączenie między czarnymi kwadratami (jeśli kwadraty są obok siebie) będzie krawędzią.

Daje to graph.

Na wykresie pojawi się DFS, aby uzyskać wszystkie grupy. Zauważ, że system plików DFS ma charakter rekursywny.

0

Na początku każda komórka będzie "nieodwiedzana".

Chciałbym iterować przez komórki, dopóki nie spotkasz "nieodwiedzonych" czarnych komórek. Każda biała komórka, którą trafiłeś do tego momentu,

Po uderzeniu w czarną komórkę, "rozwinąć" ją do wszystkich kierunków, jeśli to możliwe (podobnie do "wypełnienia"). Rozszerzasz się tak długo, jak możesz i zaznaczasz wszystkie odwiedzone komórki jako "odwiedzone". Po wykonaniu tej czynności policzysz liczbę zainfekowanych czarnych komórek i wiesz, jak duża była ta grupa. Po wykryciu grupy przechodzisz do następnej "nieodwiedzonej" czarnej komórki.

Powiązane problemy