Pagini recente » Cod sursa (job #1587195) | Cod sursa (job #1944467) | Cod sursa (job #157333) | Cod sursa (job #2556766) | Cod sursa (job #2224855)
#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;
}
std::vector<int> q;
q.push_back(k);
visited[k] = true;
const int moves[4] = {1, -1, m, -m};
bool next = true;
while (next) {
next = false;
for (int i : q) {
for (int h = 0; h < 4; h++) {
int pos = i + moves[h];
if (1 <= pos && pos <= n * m &&
!visited[pos] && visited[key[pos]] &&
!(moves[h] == -1 && pos % n == 0) && !(moves[h] == 1 && i % n == 0)) {
visited[pos] = true;
q.push_back(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;
}