Cod sursa(job #54289)

Utilizator petrePajarcu Alexandru-Petrisor petre Data 24 aprilie 2007 18:19:34
Problema Castel Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <stdio.h>
int a[152][152],b[152][152],x[22501][2],y[22501][2],cheie[22501],n,i,j,k,l,c,m,p,ok,q,nr1,nr2,mi;
int dx[4]={1,0,0,-1};
int dy[4]={0,1,-1,0};
FILE *f,*g;
int main()
{
    f=fopen("castel.in","r");
    g=fopen("castel.out","w");
    fscanf(f,"%d %d %d",&m,&n,&k);
    for (i=1;i<=m;i++)
    for (j=1;j<=n;j++)
    {fscanf(f,"%d",&a[i][j]);b[i][j]=1;
   }
    c=k % n;
    if (c==0) {
	     c=n;
	     l=k / n;
	     }
	     else l=k / n +1;
    ok=0;
    cheie[k]=1;
    nr1=1;
    x[1][1]=l;
    y[1][1]=c;
    p=1;
    q=0;mi=0;
    while (ok!=1)
    {
     ok=1;
     nr2=0;
     for (i=1;i<=nr1;i++)
     if (cheie[a[x[i][p]][y[i][p]]]==1)
				   {++mi;
				   cheie[(x[i][p]-1)*n+y[i][p]]=1;
				   a[x[i][p]][y[i][p]]=0;
				   for (j=0;j<4;j++)
				   if (b[x[i][p]+dx[j]][y[i][p]+dy[j]]!=0)
				   {++nr2;
				    x[nr2][q]=x[i][p]+dx[j];
				    y[nr2][q]=y[i][p]+dy[j];
				    b[x[nr2][q]][y[nr2][q]]=0;
				    ok=0;
				   }
				   }
				   else
				   {++nr2;
				   x[nr2][q]=x[i][p];
				   y[nr2][q]=y[i][p];
				   }
    nr1=nr1^nr2;
    nr2=nr2^nr1;
    nr1=nr1^nr2;
    p=p^q;
    q=q^p;
    p=p^q;
    }  
  fprintf(g,"%d",mi);
  fclose(f);
  fclose(g);
  return (0);}