Afişează mesaje
Pagini: [1]
1  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 824 Insule : Martie 06, 2012, 11:49:10
Zice ca nu imi merge niciun test. Am luat testele de pe olimpiada.info si cateva imi merg,mai ales prima cerinta. Unde gresesc? Multumesc anticipat !
Cod:
#include<stdio.h>
int n,m,a[100][100],s[100][100],x[5]={0,1,0,-1,0},y[5]={0,0,-1,0,1},min=1000;
FILE *f=fopen("insule.in","r");
FILE *g=fopen("insule.out","w");
void citire()
{
int i,j;
fscanf(f,"%d",&n);
fscanf(f,"%d\n",&m);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
fscanf(f,"%c",&a[i][j]);
s[i][j]=a[i][j];
a[i][j]=a[i][j]-48;
s[i][j]=s[i][j]-48;
}
fprintf(f,"\n");
}
fclose(f);
}
void insule(int i,int j,int k)
{
int ii,jj,l;
for(l=1;l<=4;l++)
{
ii=i+x[l];
jj=j+y[l];
if(ii>=0 && ii<n && jj>=0 && jj<m )
if(a[ii][jj]==k)
{
a[ii][jj]=0;
insule(ii,jj,k);
}
}
}
void traseu(int i,int j,int pas)
{
int ii,jj,k;
for(k=1;k<4;k++)
{
ii=i+x[k];
jj=j+y[k];
if(ii<n && ii>=0 && jj<m && jj>=0)
if(s[ii][jj]!=-1 && s[ii][jj]!=-3)
if(s[ii][jj]==-2)
{
if(s[i][j]<min && s[i][j]>0)
{
min=s[i][j];
}
break;
}
else
if(s[ii][jj]>pas || s[ii][jj]==0)
{
s[ii][jj]=pas;
traseu(ii,jj,pas+1);
}
}
}
int main()
{
citire();
int i,j,nr=0,ng=0,nb=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(a[i][j]==1)
{
a[i][j]=0;
insule(i,j,1);
nr++;
}
else
if(a[i][j]==2)
{
ng++;
a[i][j]=0;
insule(i,j,2);
}
else
if(a[i][j]==3)
{
nb++;
a[i][j]=0;
insule(i,j,3);
}
}
fprintf(g,"%d %d %d ",nr,ng,nb);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(s[i][j]==3)
s[i][j]=-3;
if(s[i][j]==1)
s[i][j]=-1;
if(s[i][j]==2)
s[i][j]=-2;
}

for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(s[i][j]==-1)
traseu(i,j,1);
fprintf(g,"%d",min);
fclose(g);
}

Editat de moderator: Foloseste tagul code pentru afisa sursele.
Pagini: [1]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines