Cod sursa(job #2198166)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 23 aprilie 2018 19:41:50
Problema Castel Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include <queue>
using namespace std;
const int NMAX = 155;
int v[NMAX * NMAX];
int q[NMAX * NMAX];
int vf[NMAX * NMAX];
int cheie[NMAX * NMAX];

int main()
{
  int n, m, k;
  freopen("castel.in", "r", stdin);
  freopen("castel.out", "w", stdout);
  scanf("%d%d%d", &m, &n, &k);
  int dir[]= {1, -1, n, -n};
  int  p = 0, top = 0;
  for(int i = 1; i <= n; ++i) {
    for(int j = 1; j <= m; ++j) {
      scanf("%d", &v[++p]);
    }
  }
  vf[k] = 1;
  cheie[k] = 1;
  q[++top] = k;
  bool ok = 0;
  while(ok == 0) {
    ok = 1;
    for(int i = 1; i <= top; ++i) {
      for(int j = 0; j < 4; ++j) {
        int np = q[i] + dir[j];
        if(1 > np || n * m < np || vf[np] != 0 || (dir[j] == -1 && np % n == 0)) {
          continue;
        }
        if(cheie[v[np]] == 1) {
          ok = 0;
          vf[np] = 1;
          cheie[np] = 1;
          q[++top] = np;
        }
      }
    }
  }
  int sol = 0;
  for(int i = 1; i <= n * m; ++i)
    if(vf[i] == 1)
      ++sol;
  printf("%d\n", sol);
  return 0;
}