Pagini recente » Cod sursa (job #1742850) | Cod sursa (job #2613119) | Cod sursa (job #2163128) | Cod sursa (job #2543700) | Cod sursa (job #501555)
Cod sursa(job #501555)
#include <stdio.h>
#include <vector>
#define DN 180
using namespace std;
const int di[]={-1,1, 0, 0};
const int dj[]={ 0, 0,-1,1};
int N, M, K, A[DN][DN], coada[DN*DN], rez;
char v[DN][DN], key[DN*DN];
vector<int> lsc[DN*DN];
int main()
{
int n, i, j, d, ii, jj, ql, qr;
freopen("castel.in", "r", stdin);
freopen("castel.out", "w", stdout);
scanf("%d %d %d", &N, &M, &K);
for (i=0; i < N; i++)
for (j=0; j < M; j++) {
scanf("%d", A[i]+j);
--A[i][j];
}
coada[ql=qr=0]=--K;
v[K/M][K%M]=1;
for (; ql <= qr; ql++){
key[n=coada[ql]]=1; ++rez;
for (vector<int>::iterator it=lsc[n].begin(); it != lsc[n].end(); it++)
if (!v[*it/M][*it%M]){
coada[++qr]=*it;
v[*it/M][*it%M]=1;
}
i=n/M; j=n%M;
for (d=0; d < 4; d++){
ii=i+di[d], jj=j+dj[d];
if (ii < 0 || jj < 0 || ii >= N || jj >= M || v[ii][jj]) continue;
if (key[A[ii][jj]]){
coada[++qr]=ii*M+jj;
v[ii][jj]=1;
}
else lsc[A[ii][jj]].push_back(ii*M+jj);
}
}
printf("%d", rez);
return 0;
}