Pagini recente » Cod sursa (job #1412879) | Cod sursa (job #2169708) | Cod sursa (job #1035820) | Cod sursa (job #1273314) | Cod sursa (job #2224859)
#include <stdio.h>
#include <vector>
int main() {
freopen("castel.in", "r", stdin);
freopen("castel.out", "w", stdout);
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
int key[n * m + 1];
bool visited[n * m + 1];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) {
scanf("%d", &key[(i - 1) * m + j]);
visited[(i - 1) * m + j] = false;
}
int q[n * m + 1], qn = 1;
q[qn] = k;
visited[k] = true;
const int moves[4] = {1, -1, m, -m};
bool next = true;
while (next) {
next = false;
for (int i = 1; i <= qn; i++) {
for (int h = 0; h < 4; h++) {
int pos = q[i] + moves[h];
if (1 <= pos && pos <= n * m &&
!visited[pos] && visited[key[pos]] &&
!(moves[h] == -1 && pos % m == 0) && !(moves[h] == 1 && q[i] % m == 0)) {
visited[pos] = true;
q[++qn] = pos;
next = true;
}
}
}
}
int ans = 0;
for (int i = 1; i <= n * m; i++)
ans += visited[i];
printf("%d\n", ans);
fclose(stdin);
fclose(stdout);
return 0;
}