Mi permetto una piccola modifica 
In verde quello che aggiungerei, in rosso quello che toglierei:
codice:
<vector> points; //lista dinamica di punti
<vector> temp;
int aree = 0; //conte la aree trovate
1)
cerchi nella matrice,per righe dall'alto verso il basso e per colonne da sinistra a destra,
un punto che rispetti queste 2 caratteristiche:
deve essere uguale a 1 e non deve essere già nella lista point.
Se il punto rispetta queste condizioni:
aree++;
metti il punto nella lista points
2)
Cerchi a destra e sinistra, su e giù rispetto a questo punto,
rispettando lo stesso criterio di ricerca di cui al punto 1)
per trovare tutti i punti uguali a 1.
Tutti i punti aventi queste caratteristiche finiscono in temp.
Prendi il primo punto in temp, toglilo da temp e mettilo in points... ripeti 2) per questo punto.
Ripeti 1) fino ad esaurimento matrice
Giusto una cavolatina che mi è venuta in mente