Cod sursa(job #2855007)

Utilizator mmocanuMocanu Mihai-Adrian mmocanu Data 21 februarie 2022 22:39:43
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;

#define MAX_N 100005

vector<int> graph[MAX_N];

queue<int> bfsQueue;
int dist[MAX_N];

void addEdge(int a, int b) {
  graph[a].push_back(b);
}

void bfs(int node) {
  int qFront;

  bfsQueue.push(node);
  dist[node] = 0;

  while (!bfsQueue.empty()) {
    qFront = bfsQueue.front();

    bfsQueue.pop();
    for (const int &neighbour : graph[qFront])
      if (dist[neighbour] == -1) {
        bfsQueue.push(neighbour);
        dist[neighbour] = dist[qFront] + 1;
      }

  }
}

int main() {
  FILE *fin, *fout;
  fin = fopen("bfs.in", "r");
  fout = fopen("bfs.out", "w");

  int n, m, i, a, b, k;
  fscanf(fin, "%d%d%d", &n, &m, &k);
  for (i = 0; i < m; ++i) {
    fscanf(fin, "%d%d", &a, &b);
    addEdge(a, b);
  }

  for (i = 1; i <= n; ++i)
    dist[i] = -1;

  bfs(k);

  for (i = 1; i <= n; ++i)
    fprintf(fout, "%d ", dist[i]);

  fclose(fin);
  fclose(fout);
  return 0;
}