Pagini recente » Cod sursa (job #1913098) | Cod sursa (job #855858)
Cod sursa(job #855858)
using namespace std;
#include <fstream>
ifstream eu("insule.in");
ofstream tu("insule.out");
int dx[]={0,0,1,-1};int dy[]={1,-1,0,0};
int N,M,A[105][105],nrR,nrG,nrB,k,L[105*105],C[105*105],L1[105*105],C1[105*105],k1,Min=105*105;
void fill(int x,int y,int pas)
{
if(A[x][y]==pas)
{
A[x][y]=-1;
fill(x,y+1,pas);
fill(x,y-1,pas);
fill(x+1,y,pas);
fill(x-1,y,pas);
}
if(A[x][y]==0&&pas==1)
{
k++;L[k]=x;C[k]=y;
}
if(A[x][y]==0&&pas==2)
{
k1++;L1[k1]=x;C1[k1]=y;
}
}
int main()
{
char c;int i,j,x,y,xnou,ynou,l;
eu>>N>>M;
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
{
eu>>c;
A[i][j]=c-48;
}
for(i=0;i<=N+1;i++)
A[i][0]=A[i][M+1]=-1;
for(i=0;i<=M+1;i++)
A[0][i]=A[N+1][i]=-1;
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
{
switch (A[i][j])
{
case 1: fill(i,j,1); nrR++;break;
case 2: fill(i,j,2); nrG++;break;
case 3: fill(i,j,3); nrB++;break;
}
}
for(i=1;i<=k;i++)
{
x=L[i];y=C[i];
for(l=0;l<4;l++)
{
xnou=x+dx[l];
ynou=y+dy[l];
if(A[xnou][ynou]==0)
{
A[xnou][ynou]=A[x][y]+1;
k++;
L[k]=xnou;C[k]=ynou;
}
}
}
for(i=1;i<=k1;i++)
{
Min=min(Min,A[L1[i]][C1[i]]);
}
tu<<nrR<<" "<<nrG<<" "<<nrB<<" "<<Min<<"\n";
return 0;
}