Cod sursa(job #1799565)

Utilizator msciSergiu Marin msci Data 6 noiembrie 2016 14:49:40
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
/* BFS pentru un graf direct
 * Calculeaza distanta de la nodul sursa S la toate nodurile X;
 * daca S nu este conectat cu X, atunci distanta este egala cu -1
 */
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 100010;

int N, M, L, start;
vector<int> A[NMAX];
int G[NMAX], S[NMAX], dist[NMAX];

void bfs(int node) {
  memset(dist, -1, sizeof(dist));

  L = 1; // length of the queue
  dist[node] = 0;
  S[L] = node;

  for (int i = 1; i <= L; i++) {
    for (int j = 0; j < G[S[i]]; j++) {
      if (dist[A[S[i]][j]] >= 0) continue;
      S[++L] = A[S[i]][j];
      dist[S[L]] = dist[S[i]] + 1;
    }
  }
}

int main() {
#ifndef DEBUG
  freopen("bfs.in", "r", stdin);
  freopen("bfs.out", "w", stdout);
#endif
  scanf("%d %d %d", &N, &M, &start);
  for (int i = 1; i <= M; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    A[a].push_back(b);
  }
  for (int i = 1; i <= N; i++) {
    G[i] = A[i].size();
  }

  bfs(start);

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