2012-10-15 10 views
8

Ecco l'esempio (contando quelli neri):Come contare i gruppi di stesse celle in un array 2d?

ingresso:

enter image description here

uscita:

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

, per ora, non riesco a pensare a niente di meglio di un doloroso per iterazione. Sarebbe possibile ottenere questi gruppi in modo ricorsivo? Grazie

+0

non riesco a vedere l'ingresso! – elyashiv

+1

Che cosa conta come un "gruppo"? Rettangoli? Aree nere continue? – phimuemue

+0

beh, l'immagine è un ingresso array 2d, un gruppo di aree nere sono blocchi di quadrati neri che si trovano uno accanto all'altro (diagonalmente il lyin non conta) – Patryk

risposta

2

Imposta tutti i quadratini neri come nodi. La connessione tra i quadrati neri (se i quadrati sono uno accanto all'altro) sarà un vantaggio.

Questo ti dà un graph.

A DFS nel grafico otterrà tutti i gruppi. Si noti che DFS è ricorsivo per sua natura.

0

All'inizio, ogni cella deve essere "non visitata".

Vorrei scorrere le celle fino a incontrare una cella nera "non visitata". Ogni cella bianca raggiunta fino a quel punto

Dopo aver colpito una cella nera, la si "espande" in tutte le direzioni, se possibile (simile a "floodfilling"). Espandi il più a lungo possibile e contrassegna tutte le celle visitate come "visitate". Dopo averlo fatto, conta quante celle nere hai infettato e sai quanto era grande il gruppo. Dopo aver rilevato il gruppo, si passa alla successiva cella nera "non visitata".