Pagini recente » Cod sursa (job #635509) | Cod sursa (job #1161973) | Cod sursa (job #1596832) | Cod sursa (job #2629586) | Cod sursa (job #575135)
Cod sursa(job #575135)
#include<stdio.h>
#define DMAX 152
#define LMAX 50001
typedef struct { int x; int y; } Queue;
int M, N, K, i, j, A[DMAX][DMAX], Nr, xi, yi, xii, yii;
int dx[]={-1,0,1,0}, dy[]={0,1,0,-1};
bool IN[DMAX][DMAX], Key[DMAX][DMAX];
Queue Q[LMAX];
void Lee()
{
int dr = 0, ii, jj, xc, yc;
bool acces = true;
Q[0].x = K/M;
if( (K%M) ) ++Q[0].x;
Q[0].y = K%M;
if( !Q[0].y ) Q[0].y = M;
while( acces )
{
acces = false;
for( jj=0; jj<=dr; jj++ )
{
xc = Q[jj].x; yc = Q[jj].y;
for( ii=0; ii<4; ii++ )
if( xc+dx[ii]>0 && xc+dx[ii]<=N && yc+dy[ii]>0 && yc+dy[ii]<=M )
{
int lin = A[xc+dx[ii]][yc+dy[ii]]/M;
if( (A[xc+dx[ii]][yc+dy[ii]]%M) ) ++lin;
int col = A[xc+dx[ii]][yc+dy[ii]]%M;
if( !col ) col = M;
if( !IN[xc+dx[ii]][yc+dy[ii]] && Key[lin][col] )
{
++dr;
Q[dr].x = xc+dx[ii];
Q[dr].y = yc+dy[ii];
Key[xc+dx[ii]][yc+dy[ii]] = true;
IN[xc+dx[ii]][yc+dy[ii]] = true;
acces = true;
++Nr;
}
}
}
}
}
int main()
{
freopen("castel.in","r",stdin);
freopen("castel.out","w",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]);
Nr = 1;
xi = K/M;
if( (K%M) ) ++xi;
yi = K%M;
if( !yi ) yi = M;
IN[xi][yi] = true;
Key[xi][yi] = true;
Lee();
printf("%d\n", Nr);
return 0;
}