Cod sursa(job #2660039)

Utilizator cristi_macoveiMacovei Cristian cristi_macovei Data 18 octombrie 2020 00:50:46
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <unordered_set>

const int NMAX = 1e5;

int n, m, s;
int dist[1 + NMAX];
std::unordered_set<int> adj[1 + NMAX];

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

  in >> n >> m >> s;
  int x, y;
  while (in >> x >> y)
    adj[x].insert(y);

  in.close();
}

int main() {
  read();

  std::queue<std::pair<int, int>> bfs;
  bfs.push({s, 1});

  while (!bfs.empty()) {
    auto fr = bfs.front();
    bfs.pop();

    dist[fr.first] = fr.second;
    for (int i = 1; i <= n; ++i) {
      if (adj[fr.first].count(i) && (dist[i] == 0 || dist[i] > fr.second + 1))
        bfs.push({i, fr.second + 1});
    }
  }

  std::ofstream out("bfs.out");
  for (int i = 1; i <= n; ++i)
    out << dist[i] - 1 << ' ';

  out.close();
  return 0;
}