Pagini recente » Cod sursa (job #1124806) | Cod sursa (job #1292736) | Cod sursa (job #1005097) | Cod sursa (job #264543) | Cod sursa (job #155587)
Cod sursa(job #155587)
#include <stdio.h>
#include <vector>
#define maxim 180
using namespace std;
const int di[] = {-1,+1, 0, 0};
const int dj[] = { 0, 0,-1,+1};
int N, M, K, A[180][180], Q[180*180], final;
char U[180][180], cheiecrt[180*180];
vector<int> lstcheie[180*180];
int main(){
int n, i, j, d, ii, jj, ql, qr;
vector<int>::iterator it;
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]--;
}
Q[ql = qr = 0] = --K;
U[K/M][K%M] = 1;
for (; ql <= qr; ql++){
cheiecrt[n = Q[ql]] = 1;
final++;
for (it = lstcheie[n].begin(); it != lstcheie[n].end(); it++)
if (!U[*it/M][*it%M]){
Q[++qr] = *it;
U[*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 || U[ii][jj]) continue;
if (cheiecrt[A[ii][jj]]){
Q[++qr] = ii*M+jj;
U[ii][jj] = 1;
}
else
lstcheie[A[ii][jj]].push_back(ii*M+jj);
}
}
printf("%d\n", final);
return 0;
}