Cod sursa(job #955455)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 31 mai 2013 19:57:47
Problema Castel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
FILE *f=fopen("castel.in","r"),*g=fopen("castel.out","w");
int n,m,pos,posx,posy,key[151][151],use[151][151],free[22505],l[22505],c[22505],sol;
void Read()
{ int i,j,aux;
    fscanf(f,"%d %d %d",&n,&m,&pos);
    posx=((pos-1)/m)+1;
    posy=pos%m; if (!posy) posy=m;
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
   fscanf(f,"%d",&key[i][j]);
}
void Lee()
{ int ok,i,j,x,y,k,loc,dx[]={0,-1,0,1,0},dy[]={0,0,1,0,-1};
    free[pos]=1;
    use[posx][posy]=1;
    k=1; l[1]=posx; c[1]=posy; sol=1;
   ok=0;
  while(!ok)
  { ok=1;
     for(i=1;i<=k;i++)
      for(j=1;j<=4;j++)
       { x=l[i]+dx[j]; y=c[i]+dy[j];
          loc=((x-1)*m)+y;
          //printf("hello %d %d l%d\n",m,y,loc);
          if (x>0 && x<=n && y>0 && y<=m && !use[x][y] && free[key[x][y]])
          {ok=0; k++; l[k]=x; c[k]=y;
          //printf("%d %d\n",x,y);
           sol++; use[x][y]=1;
           free[loc]=1;
           if (sol==m*n) return;}
       }
  }
}
int main()
{ Read();
  Lee();
   fprintf(g,"%d",sol);
    return 0;
}