Pagini recente » Cod sursa (job #1133776) | Cod sursa (job #590167) | Cod sursa (job #2455376) | Cod sursa (job #2263151) | Cod sursa (job #2224848)
#include <stdio.h>
#include <queue>
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;
}
std::queue<int> q;
q.push(k);
visited[k] = true;
const int moves[4] = {1, -1, m, -m};
while (!q.empty()) {
for (int h = 0; h < 4; h++) {
int pos = q.front() + moves[h];
if (1 <= pos && pos <= n * m &&
!visited[pos] && visited[key[pos]] &&
!(moves[h] == -1 && pos % n == 0) && !(moves[h] == 1 && q.front() % n == 0)) {
visited[pos] = true;
q.push(pos);
}
}
q.pop();
}
int ans = 0;
for (int i = 1; i <= n * m; i++)
ans += visited[i];
printf("%d\n", ans);
fclose(stdin);
fclose(stdout);
return 0;
}