Cod sursa(job #178207)

Utilizator omu_salcamtache tudor omu_salcam Data 14 aprilie 2008 11:08:44
Problema Castel Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<stdio.h>
#include<search.h>
long li,ci,a,b,c,nc,ii,i,j,l,n,m,np;
FILE *f1,*f2;
int lee[1111],chei[1111],ma[111][111];
void stergere(){
for(ii=j;ii<l;lee[ii]=lee[ii+1],ii++);
l--;
}
void Ladaugare(int a){
c=1;
for(ii=1;c&&ii<=l;ii++){
	if(lee[ii]==a){
		c=0;
	}
}
l++;
lee[l]=a;
}
void Cadaugare(){
c=1;
for(ii=1;c&&ii<=nc;ii++){
	if(chei[ii]==lee[j]){
		c=0;
	}
}
if(c){
	nc++;
	chei[nc]=lee[j];
}
}
int main(){
f1=fopen("castel.in","r");
f2=fopen("castel.out","w");
fscanf(f1,"%ld%ld%ld",&m,&n,&a);
for(i=1;i<=m;i++){
	for(j=1;j<=n;fscanf(f1,"%d",&ma[i][j]),j++);
}
nc=1;
chei[1]=a;
l=1;
lee[1]=a;
i=1;
while(i<=nc){
	j=1;
	while(j<=l){
		li=(lee[j]-1)/n+1;
		ci=(lee[j]-1)%n+1;
		if(ma[li][ci]==chei[i]){
			if(li<m&&ma[li+1][ci]>0){
				Ladaugare(lee[j]+n);
			}
			if(li>1&&ma[li-1][ci]>0){
				Ladaugare(lee[j]-n);
			}
			if(ci<n&&ma[li][ci+1]>0){
				Ladaugare(lee[j]+1);
			}
			if(ci>1&&ma[li][ci-1]>0){
				Ladaugare(lee[j]-1);
			}
			Cadaugare();
			stergere();
			ma[li][ci]*=-1;
			j--;
		}
		j++;
	}
	i++;
}
a=0;
for(i=1;i<=m;i++){
	for(j=1;j<=n;j++){
		if(ma[i][j]<0){
	 a++;
		}
  }
}
fprintf(f2,"%ld",a);
return 0;
}