Poate va uitati putin si ma ajutati si pe mine 
#include<iostream>
#include<fstream>
using namespace std;
ifstream f ("insule.in");
ofstream gin ("insule.out");
int a[100][100],i,j,n,m,b[100][100];
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
struct punct {int x,y;} c[10000];
void fill (int x,int y,int k)
{if (a
- [y]==k) {a
- [y]=k*-1;
fill(x,y+1,k);
fill(x+1,y,k);
fill(x,y-1,k);}}
int lee(int x0,int y0)
{int k,u,p,xc,yc,xv,yv;
for (i=0;i<=n+1;i++)
for (j=0;j<=m+1;j++)
b[j]=a[j];
c[1].x=x0; c[1].y=y0;
u=p=1;
while (p<=u)
{xc=c[p].x; yc=c[p].y;
for (k=0;k<4;k++)
{xv=xc+dx[k];
yv=yc+dy[k];
if (b[xv][yv] == -2) return b[xc][yc];
else
if (b[xv][yv] == 0)
{b[xv][yv]=b[xc][yc]+1;
u++; c.x=xv; c.y=yv;}
else
if (b[xv][yv]>0 && b[xv][yv]>b[xc][yc]+1)
{b[xv][yv]=b[xc][yc]+1;
u++; c.x=xv; c.y=yv;}
} }
p++;}
int main()
{ char x;
int q,min=10000;
int r=0,g=0,b=0;
f>>n>>m;
//bordare matrice cu -4;
for (i=0;i<=n+1;i++)
a
- =a[m+1]=-4;
a[0][j]=a[n+1][j]=-4;
//citire in matrice;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{f>>x; a[j]=x-'0';}
//verificare numar insule;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{if (a[j]==1) {r++; fill(i,j,1);}
if (a[j]==2) {g++; fill(i,j,2);}
if (a[j]==3) {b++; fill(i,j,3);}}
//lungime min pod;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{q=lee(i,j);
if (q<min) min=q;}
gin<<r<<" "<<g<<" "<<b<<" "<<min;
f.close(); gin.close();
return 0;}
