Cod sursa(job #3150635)

Utilizator victorzarzuZarzu Victor victorzarzu Data 17 septembrie 2023 18:58:40
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#include <queue>

using namespace std;
#define oo 0x3f3f3f3f

ifstream f("bfs.in");
ofstream g("bfs.out");
int n, m, src;
int result[100001];
vector<int> graph[100001];

void read() {
 f>>n>>m>>src;
 int x, y;
 for(int i = 1;i <= m;++i) {
    f>>x>>y;
    graph[x].push_back(y);
 }
}

void solve() {
  queue<pair<int, int>> q;
  q.push({src, 0});
  memset(result, oo, sizeof(result));
  result[src] = 0;

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

    for(const auto& ngh : graph[front.first]) {
      if(result[ngh] == oo) {
        q.push({ngh, front.second + 1});
        result[ngh] = front.second + 1;
      }
    }
  }

  for(int i = 1;i <= n;++i) {
    g<<(result[i] == oo ? -1 : result[i])<<" ";
  }
}

int main() {
  read();
  solve();
  return 0;
}