Pagini recente » Cod sursa (job #1683327) | Cod sursa (job #49043) | Cod sursa (job #1401128) | Cod sursa (job #2846321) | Cod sursa (job #57632)
Cod sursa(job #57632)
#include <cstdio>
#include <stdlib.h>
#include <math.h>
FILE *in = fopen("castel.in","r"), *out = fopen("castel.out","w");
int m, n, k;
int a[152][152] = {{0}};
void read()
{
fscanf(in, "%d %d %d", &m, &n, &k);
for ( int i = 1; i <= m; ++i )
for ( int j = 1; j <= n; ++j )
fscanf(in, "%d", &a[i][j]);
}
struct coada
{
int x, y;
};
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
int lee(int x, int y)
{
coada b[23104];
int p = 0, u = 0;
b[p].x = x;
b[p].y = y;
int cnt = 1;
int chei[23104] = {0};
int viz[152][152] = {{0}};
chei[k] = 1;
viz[x][y] = 1;
while ( p <= u )
{
for ( int i = 0; i < 4; ++i )
{
int X = b[p].x + dx[i];
int Y = b[p].y + dy[i];
if ( !viz[X][Y] && chei[a[X][Y]] == 1 )
{
++u;
b[u].x = X;
b[u].y = Y;
++cnt;
chei[n*X-(n-Y)] = 1;
viz[X][Y] = 1;
}
}
for ( int i = 0; i <= p; ++i )
{
for ( int j = 0; j < 4; ++j )
{
int X = b[i].x + dx[j];
int Y = b[i].y + dy[j];
if ( !viz[X][Y] && chei[a[X][Y]] == 1 )
{
++u;
b[u].x = X;
b[u].y = Y;
++cnt;
chei[n*X-(n-Y)] = 1;
viz[X][Y] = 1;
}
}
}
++p;
}
// for ( int i = 0; i <= n*m; ++i )
// printf("%d ", chei[i]);
// printf("\n");
return cnt;
}
int main()
{
read();
// for ( int i = 1; i <= m; ++i )
// {
// for ( int j = 1; j <= n; ++j )
// printf("%d ", a[i][j]);
// printf("\n");
// }
//
// int t = 0, x = 0, y = 0;
// for ( int i = 1; i <= m; ++i )
// {
// for ( int j = 1; j <= n; ++j )
// {
// ++t;
// if ( t == k )
// {
// x = i;
// y = j;
// break;
// }
// }
// }
// printf("%d %d\n", x, y);
// printf("%d %d\n", (k-1)/n+1, (k-1)%n+1);
fprintf(out, "%d\n", lee((k-1)/n+1, (k-1)%n+1));
return 0;
}