Cod sursa(job #144106)

Utilizator katakunaCazacu Alexandru katakuna Data 27 februarie 2008 11:18:21
Problema Castel Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<stdio.h>

int ok,viz[20000],ka,ce[20000],j,x,y,n,m,k,i,p,u,c[20000],a[20000],d[5]={-1,1};

int main(){
FILE *f=fopen("castel.in","r");
fscanf(f,"%d %d %d",&n,&m,&k);

 for(i=1;i<=n*m;i++){
 fscanf(f,"%d",&a[i]);

 }

fclose(f);

  c[1]=k;
  a[k]=-1;
  ce[k]=1;
  viz[k]=-1;

d[2]=m;
d[3]=m;

  p=1;
  u=1;



    while(p<=u){
    ok=0;

      for(i=0;i<=1;i++){

      if(c[p]%m==0){
      x=c[p]/m-1;
      }
      else x=c[p]/m;


      if((c[p]+d[i])%m==0){
      y=(c[p]+d[i])/m-1;
      }
      else y=(c[p]+d[i])/m;




	if( ce[ a[c[p]+d[i]] ]==1&&viz[c[p]+d[i]]!=-1&&x==y){
	u++;
	c[ u ]=c[p]+d[i];
	viz[c[p]+d[i]]=-1;
	ce[ c[p]+d[i]]=1;
	ok=1;
	}


      }

      for(i=2;i<=3;i++){

	if( ce[ a[c[p]+d[i]] ]==1&&viz[c[p]+d[i]]!=-1&&c[p]+d[i]>=1&&c[p]+d[i]<=n*m){
	u++;
	c[ u ]=c[p]+d[i];
	viz[c[p]+d[i]]=-1;
	ce[ c[p]+d[i]]=1;
	ok=1;
	}


      }
    if(ok)p=0;
    p++;
    }

FILE *g=fopen("castel.out","w");
fprintf(g,"%d",u);
fclose(g);

return 0;
}