Pagini recente » Cod sursa (job #3184793) | Cod sursa (job #627726) | Cod sursa (job #518197) | Cod sursa (job #2319517) | Cod sursa (job #57219)
Cod sursa(job #57219)
/* Ivan Nicolae - Bucuresti */
/* Problema Castel - ONI 2007 - cls. X - solutia cu BF */
#include <stdio.h>
#define NMAX 151
#define MMAx 151
#define _fin "castel.in"
#define _fout "castel.out"
int i,j,n,m,A[NMAX][NMAX],c,k;
int c_x[NMAX*NMAX],c_y[NMAX*NMAX], Q[NMAX*NMAX];
int dx[] = {-1,+0,-0,+1};
int dy[] = {+0,-1,+1,-0};
void mem_set(int A[], int n, int ce)
{
for (int i=0;i<=n;i++)
A[i]=ce;
}
int getX(int k)
{
int x;
x=(k / m)+1;
if (!(k % m))
x--;
return x;
}
int getY(int k)
{
int y;
y=k-((getX(k)-1)*m);
return y;
}
int getVal(int x, int y)
{
int rez;
rez=(x-1)*m+y;
return rez;
}
void ReadData(void)
{
int i,j;
freopen(_fin,"r",stdin);
scanf("%d%d%d",&n,&m,&k);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
scanf("%d",&A[i][j]);
fclose(stdin);
}
int Okay(int x, int y)
{
if (x<1 || y<1 || x>n || y>m)
return 0;
if (Q[getVal(x,y)])
return 0;
if (!Q[A[x][y]])
return 0;
return 1;
}
void Solve(void)
{
int i,j;
mem_set(Q,(NMAX*NMAX),0); c=0;
c_x[++c]=getX(k); c_y[c]=getY(k); Q[k]=1;
int nou=1;
while (nou)
{
nou=0;
for (i=1;i<=c;i++)
{
int x=c_x[i],y=c_y[i];
for (j=0;j<=3;j++)
{
int xx=x+dx[j], yy=y+dy[j];
if (Okay(xx,yy))
{
Q[getVal(xx,yy)]=1;
c_x[++c]=xx; c_y[c]=yy;
nou++;
}
}
}
}
}
void PrintData(void)
{
freopen(_fout,"w",stdout);
printf("%d",c);
fclose(stdin);
}
int main(void)
{
ReadData();
Solve();
PrintData();
return 0;
}