Cod sursa(job #291579)
#include <stdio.h>
#define NMAX 200
int n,m,k,i,j,h,x,y,p,u,la,ca,lv,cv;
int a[NMAX][NMAX], v[NMAX][NMAX];
char dx[4]={-1, 0, 1, 0};
char dy[4]={0, 1, 0, -1};
int main()
{
unsigned char c[31000][2];
freopen("castel.in","r",stdin);
freopen("castel.out","w",stdout);
scanf("%d %d %d", &m, &n, &k);
for (i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
scanf("%d", &v[i][j]);
if(v[i][j]==1) a[i][j]=0;
else a[i][j]=-1;
}
for (i=0;i<=n+1;i++)
{
a[0][i]=-1;
a[m+1][i]=-1;
}
for (i=0;i<=m+1;i++)
{
a[i][0]=-1;
a[i][n+1]=-1;
}
p=1; u=1;
x=k/n+1;
y=k%n;
if(y==0){
x--;
y=n;
}
c[1][0]=x;
c[1][1]=y;
a[x][y]=1;
while (p<=u)
{
la=c[p][0];
ca=c[p][1];
for (i=0;i<4;i++)
{
lv=la+dx[i];
cv=ca+dy[i];
if(a[lv][cv]==0){
u++;
c[u][0]=lv;
c[u][1]=cv;
a[lv][cv]=1;
x=(lv-1)*n+cv;
for (h=1;h<=m;h++)
for(j=1;j<=n;j++)
if(v[h][j]==x) a[h][j]=0;
p=1;
}
}
p++;
}
printf("%d", p-1);
return 0;
}