Cod sursa(job #2855002)

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

#define MAX_N 100000

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] = 1;

  while (!bfsQueue.empty()) {
    qFront = bfsQueue.back();
    bfsQueue.pop();

    for (const int &neighbour : graph[qFront])
      if (dist[neighbour] == 0) {
        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);
  }

  bfs(k);

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

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