Cod sursa(job #1475471)

Utilizator salam1Florin Salam salam1 Data 24 august 2015 09:07:49
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
int n, m, source;
const int NMAX = 100505;
const int INF = 0x3f3f3f3f;
vector<int> G[NMAX];
queue<int> Q;

void read() {
  scanf("%d%d%d", &n, &m, &source);
  int x, y;
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &x, &y);
    G[x].push_back(y);
  }
}

void solve() {
  Q.push(source);
  vector<int> D(n + 1, INF);
  D[source] = 0;
  
  while (!Q.empty()) {
    int node = Q.front();
    Q.pop();
    for (auto it = G[node].begin(); it != G[node].end(); it++) {
      if (D[*it] > D[node] + 1) {
        D[*it] = D[node] + 1;
        Q.push(*it);
      }
    }
  }
  
  for (int i = 1; i <= n; i++) {
    if (i > 1) printf(" ");
    printf("%d", D[i] == INF ? -1 : D[i]);
  }
  printf("\n");
}

int main() {
  freopen("bfs.in", "r", stdin);
  freopen("bfs.out", "w", stdout);
  
  read();
  solve();
  return 0;
}