Cred ca asta este cel mai simplu exemplu al algoritmului de fill. Se poate face bineinteles cu teoria grafurilor, insa cred ca este mai usor cu fill. Daca ai nelamuriri scriele mai jos.
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("insule.in");
ofstream fout("insule.out");
int dx[4]={1, -1, 0, 0};
int dy[4]={0, 0, 1, -1};
int Map[1005][1005];
int n,m,contor;
void parcurgere(int x, int y) {
int iNext, jNext;
for(int dir=0; dir<4; dir++) {
iNext=x+dx[dir];
jNext=y+dy[dir];
if(Map[iNext][jNext]==1) {
Map[iNext][jNext]=0;
dir=-1;
parcurgere(iNext,jNext);
}
}
}
int main()
{
fin>>n>>m;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
fin>>Map[i][j];
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++) {
if(Map[i][j]==1) {
Map[i][j]=0;
parcurgere(i,j);
contor++;
}
}
fout<<contor;
return 0;
}