Pagini recente » Cod sursa (job #1978564) | Cod sursa (job #116319) | Cod sursa (job #2525879) | Cod sursa (job #2457181) | Cod sursa (job #123617)
Cod sursa(job #123617)
#include <stdio.h>
#define NMax 151
#define ZID -1
#define ND 4
int n, m, init;
int a[NMax][NMax];
int cam[NMax][NMax];
int chei[NMax];
int viz[NMax];
int in, sf;
int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};
struct point{ int x, y; };
point start, C[NMax*NMax], aux;
FILE *f, *g;
void citire();
void rez();
int main()
{
citire();
rez();
return 0;
}
void rez()
{
int i, ok;
in = sf = 0;
C[in] = start;
chei[cam[start.x][start.y]] = 1;
viz[cam[start.x][start.y]] = 1;
while ( 1 )
{
ok = 0;
for (i=in; i<=sf && !ok ; i++)
if ( chei[a[C[i].x][C[i].y]] )
ok = 1;
if ( !ok )
break;
aux = C[in++];
if ( !chei[a[aux.x][aux.y]] )
{
sf++;
C[sf] = aux;
continue;
}
else
{
viz[cam[aux.x][aux.y]] = 1;
chei[cam[aux.x][aux.y]] = 1;
}
for (i=0; i<ND; i++)
if ( a[aux.x+dx[i]][aux.y+dy[i]] != ZID && !viz[cam[aux.x+dx[i]][aux.y+dy[i]]] )
{
sf++;
C[sf].x = aux.x+dx[i];
C[sf].y = aux.y+dy[i];
}
}
for (i=0, ok=0; i<=n*m; i++)
if ( viz[i] )
ok++;
fprintf( g, "%d\n", ok );
}
void citire()
{
int i, j, camAux = 1;
f = fopen( "castel.in", "rt" );
g = fopen( "castel.out", "wt" );
fscanf( f, "%d %d %d", &n, &m, &init );
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
{
fscanf( f, "%d", &a[i][j] );
if ( camAux == init )
{
start.x = i;
start.y = j;
}
cam[i][j] = camAux++;
}
for (i=0; i<=n+1; i++)
a[i][0] = a[i][m+1] = ZID;
for (i=0; i<=m+1; i++)
a[0][i] = a[n+1][i] = ZID;
}