Afişează mesaje
Pagini: [1]
1  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 824 Insule : Februarie 06, 2013, 21:27:13
Chiar nu-mi dau seama unde cicleaza codul.  Brick wall Poate va uitati putin si ma ajutati si pe mine Very Happy

#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-1,y,k);
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;
for (j=0;j<=m+1;j++)
   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;}
Pagini: [1]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines