Cod sursa(job #2224855)

Utilizator Robert_VRVRobert Vadastreanu Robert_VRV Data 25 iulie 2018 13:22:30
Problema Castel Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#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;
}