Cod sursa(job #124613)
#include<stdio.h>
#define NMAX 151
long ll[4]={0,0,1,-1};
long cc[4]={1,-1,0,0};
long rez,p,in,b,sf,xi,yi,x[NMAX][NMAX],y[NMAX*NMAX],z[NMAX][NMAX],s[NMAX][NMAX],i,j,n,l,m,k,a,w,c;
struct kkt
{
long X,Y;
};
kkt q[NMAX*NMAX];
int main()
{
freopen("castel.in","r",stdin);
freopen("castel.out","w",stdout);
scanf("%ld%ld%ld",&n,&m,&c);
a=0;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
scanf("%ld",&x[i][j]);
p++;
s[i][j]=p;
if (p==c)
{
xi=i;
yi=j;
}
}
y[c]=1;
z[xi][yi]=1;
rez=1;
in=1;
sf=1;
q[1].X=xi;
q[1].Y=yi;
w=1;
while (w)
{
in=1;
w=0;
while (in<=sf)
{
for (l=0;l<=3;l++)
{
a=q[in].X+ll[l];
b=q[in].Y+cc[l];
if (z[a][b]==0&&y[x[a][b]]==1&&a>=1&&a<=n&&b>=1&&b<=m)
{
sf++;
q[sf].X=a;
q[sf].Y=b;
y[s[a][b]]=1;
z[a][b]=1;
rez++;
w=1;
}
}
in++;
}
}
printf("%ld\n",rez);
return 0;
}