Cod sursa(job #2834924)

Utilizator PechiPecherle George Pechi Data 17 ianuarie 2022 20:51:58
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");

vector<vector<int>> adj;
vector<int> cost;
bitset<100001> vizitat;
int n,start;

void citire()
{
  int m;
  fin>>n>>m>>start;
  adj.resize(n+1);
  cost.resize(n+1);
  while(m--)
  {
    int x,y;
    fin>>x>>y;
    adj[x].push_back(y);
  }
}

void bfs(int nod_start)
{
  queue<int> coada;
  cost[start] = 0;
  coada.push(start);

  while(!coada.empty())
  {
    int nod_curent = coada.front();
    coada.pop();
    vizitat[nod_curent] = true;

    for(auto vecin:adj[nod_curent])
      if(!vizitat[vecin])
      {
        cost[vecin] = cost[nod_curent] + 1;
        coada.push(vecin);
      }
  }
}

void afisare_cost()
{
  for(int i=1;i<=n;i++)
    if(vizitat[i])
      fout<<cost[i]<<' ';
    else
      fout<<-1<<' '; //daca nu e vizitat inseamna ca nu se poate ajunge in el

}

int main()
{
  citire();
  bfs(start);
  afisare_cost();
  return 0;
}