Cod sursa(job #2667331)

Utilizator cristi_macoveiMacovei Cristian cristi_macovei Data 3 noiembrie 2020 12:34:01
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <cstring>

const int NMAX = 1e5;

int n, m, start;

int dist[1 + NMAX];

std::vector<int> graf[1 + NMAX];

std::queue<int> q;

void read() {
  std::ifstream in("bfs.in");

  in >> n >> m >> start;

  int x, y;
  while (in >> x >> y)
    graf[x].push_back(y);

  in.close();

  memset(dist, -1, sizeof(dist));
}

void bfs() {
  q.push(start);
  dist[start] = 0;

  while (!q.empty()) {
    int nod = q.front();
    q.pop();

    for (int vecin : graf[nod]) {
      if (dist[vecin] == -1 || dist[vecin] > dist[nod] + 1) {
        dist[vecin] = dist[nod] + 1;
        q.push(vecin);
      }
    }
  }
}

int main() {
  read();
  bfs();

  std::ofstream out("bfs.out");

  for (int i = 1; i <= n; ++i)
    out << dist[i] << ' ';

  out.close();
  return 0;
}