Cod sursa(job #2756798)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 2 iunie 2021 22:30:59
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

vector<vector<int>> Graph;
vector<int> dist;
int N, M, S;
const int INF = 0x3f3f3f3f;

void BFS(int k) {
  queue<int> Q;
  Q.push(k);
  dist.resize(N, INF);
  dist[k] = 0;

  while(!Q.empty()) {
    k = Q.front(); Q.pop();
    for (auto it: Graph[k])
      if (dist[it] == INF) {
	dist[it] = dist[k] + 1;
	Q.push(it);
      }
  }
  for (auto it: dist)
    if (it != INF)
      printf("%d ", it);
    else
      printf("-1 ");
}

int main()
{
  freopen("bfs.in", "r", stdin);
  freopen("bfs.out", "w", stdout);

  scanf("%d%d%d", &N, &M, &S);
  --S;

  Graph.resize(N);
  for (int i = 0; i < M; ++i) {
    int from, to;
    scanf("%d%d", &from, &to);
    --from; --to;
    Graph[from].emplace_back(to);
  }

  BFS(S);
  
  return 0;
}