Cod sursa(job #202664)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 10 august 2008 14:38:06
Problema Castel Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <stdio.h>

#define N_MAX 151
#define NMAX 22510
#define TRUE 1
#define FALSE 0
#define FIN "castel.in"
#define FOUT "castel.out"


int N,M,K;
int A[N_MAX][N_MAX];
int B[N_MAX][N_MAX];
int Vcx[NMAX];
int V[NMAX];
int Vcy[NMAX];
int i,j,ok,nr,x1,y1;
int REZ;


void fill(int x, int y)
{
if (V[A[x][y]]==1)
    {
     if (B[x][y]==0)
	 {
	  ok=TRUE;
	  REZ++;
	  Vcx[REZ]=x;
	  Vcy[REZ]=y;
	  B[x][y]=1;
	  V[(x-1)*M+y]=1;
	  }
      }
}


void read()
{
freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);

scanf("%d %d %d", &N, &M, &K);

for (i=1;i<=N;++i)
     for (j=1;j<=M;++j)
	  scanf("%d", &A[i][j]);
}


void solve()
{
for (i=1;i<=N;++i)
     {
      A[i][0]=-1;
      A[i][M+1]=-1;
      }
for (i=1;i<=N;++i)
     {
      A[0][i]=-1;
      A[N+1][i]=-1;
      }
x1=(K+M-1)/M;
y1=K%M;
if (y1==0)
   y1=M;
Vcx[1]=x1;
Vcy[1]=y1;
REZ=1;
V[K]=1;
ok=TRUE;
while (ok==TRUE)
       {
	ok=FALSE;
	i=0;
	while (i<REZ)
	       {
		i++;
		fill(Vcx[i]-1,Vcy[i]);
		fill(Vcx[i]+1,Vcy[i]);
		fill(Vcx[i],Vcy[i]+1);
		fill(Vcx[i],Vcy[i]-1);
		}
	   }
}

void write()
{
printf("%d", REZ-1);
printf("\n");
}


int main()
{
read();
solve();
write();
return 0;
}