Here\'s the example (counting black ones):
input:
output:
At the beginning, each cell be "unvisited".
I would iterate through the cells until you meet an "unvisited" black cell. Each white cell you hit up to that point
Once you hit a black cell, you "expand" it to all directions if possible (similar to "floodfilling"). You expand as long as you can and mark all the visited cells as "visited". After you did that, you count how many black cells you infected, and you know how big the group was. After detecting the group, you go on to the next "unvisited" black cell.
You can use algorithm for connected component labeling with 4-connectivity
Set all black squares as nodes. Connection between black squares (if the squares are next to each other) will be an edge.
This gives you a graph.
A DFS in the graph will get you all the groups. Note that DFS is recursive by nature.