Cod sursa(job #198539)

Utilizator katakunaCazacu Alexandru katakuna Data 12 iulie 2008 12:47:48
Problema Castel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<stdio.h>

struct nod{int inf;nod *urm;}*l[30003];

int a[30003],n,m,k,i,d[4]={1,-1,m,-m};
int p,u,b,c[30003],viz[30003],ch[30003];

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);
int nr=0;
p=1;
u=1;
c[1]=k;
nr=1;
ch[k]=1;
d[2]=m;
d[3]=-m;
viz[k]=1;

  while(p<=u){

    for(i=0;i<=3;i++){
    b=c[p]+d[i];
      if(!viz[b]&&b>0&&b<=n*m){

         if(ch[a[b]]){
         u++;
         c[u]=b;

           if(!ch[b]){
           //luam ch b
           ch[b]=1;
           //vedem ce putem deschide cu ea si adaugam in coada
           nod *q;

             for(q=l[b];q!=NULL;q=q->urm){
             u++;
             c[u]=q->inf;
             }

           }

         }

         else{
         //adaugam in l[a[b]]
         nod *p=new nod;
         p->urm=l[a[b]];
         p->inf=b;
         l[a[b]]=p;
         }

      viz[b]=1;
      }
    }

  p++;
  }

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


return 0;
}