Pagini recente » Cod sursa (job #1391347) | Cod sursa (job #1957616) | Cod sursa (job #2094835) | Cod sursa (job #1859726) | Cod sursa (job #845758)
Cod sursa(job #845758)
# include <algorithm>
# include <cstdio>
using namespace std ;
# define x first
# define y second
typedef pair < int, int > PR ;
const char *FIN = "castel.in", *FOU = "castel.out" ;
const int MAX = 155 ;
const int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1} ;
int A[MAX][MAX], B[MAX][MAX] ;
int ck[MAX * MAX] ;
int N, M, K, sol ;
void lee ( PR fs ) {
PR Q[MAX * MAX] ; int stop = 1, dr = 1 ;
for ( ck[K] = 1, Q[1] = fs ; stop ; ) {
stop = 0 ;
for ( int st = 1; st <= dr; ++st ) {
PR rec = Q[st] ;
for ( int k = 0; k < 4; ++k ) {
PR act = rec ;
act.x += dx[k], act.y += dy[k] ;
if ( B[ act.x ][ act.y ] == 0 && ck[ A[ act.x ][ act.y ] ] ) {
B[ act.x ][ act.y ] = 1, Q[++dr] = act ;
ck[ (act.x - 1) * M + act.y ] = stop = 1 ;
}
}
}
}
}
int main ( void ) {
freopen ( FIN, "r", stdin ) ;
scanf ( "%d %d %d", &N, &M, &K ) ;
PR fs ( K / M, K % M ) ;
fs.y ? ++fs.x : fs.y = M ;
for ( int i = 1; i <= N; ++i ) {
for ( int j = 1; j <= M; ++j ) {
scanf ( "%d", A[i] + j ) ;
}
}
B[ fs.x ][ fs.y ] = 1, lee ( fs ) ;
for ( int i = 1; i <= N; ++i ) {
for ( int j = 1; j <= M; ++j ) {
sol += B[i][j] ;
}
}
fprintf ( fopen ( FOU, "w" ) , "%d", sol ) ;
}