Cod sursa(job #2217590)

Utilizator andrei.arnautuAndi Arnautu andrei.arnautu Data 1 iulie 2018 00:36:25
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
/**
  *  Worg
  */
#include <queue>
#include <cstdio>
#include <vector>

FILE *fin = freopen("bfs.in", "r", stdin); FILE *fout = freopen("bfs.out", "w", stdout);

/*-------- Data --------*/
int n, m, s;
std::vector<std::vector<int > > graph;
/*-------- --------*/

void ReadInput() {
  scanf("%d%d%d", &n, &m, &s); graph.resize(n + 1);

  for(int i = 0; i < m; i++) {
    int u, v; scanf("%d%d", &u, &v);
    graph[u].push_back(v);
  }
}

void BFS() {
  std::vector<int > dist(n + 1, n + 1);

  dist[s] = 0;
  std::queue<int > q; q.push(s);

  while(!q.empty()) {
    int node = q.front(); q.pop();

    for(auto& itr : graph[node]) {
      if(dist[itr] == n + 1) {
        dist[itr] = dist[node] + 1;
        q.push(itr);
      }
    }
  }

  for(int i = 1; i <= n; i++) {
    printf("%d ", dist[i] == (n + 1) ? -1 : dist[i]);
  }
}

int main() {
  ReadInput();

  BFS();
  return 0;
}