Cod sursa(job #2671140)

Utilizator mihai_radulescuMihai Radulescu mihai_radulescu Data 11 noiembrie 2020 15:41:53
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>

using namespace std;

ifstream f("bfs.in");
ofstream g("bfs.out");

int n, m, val, x1, x2, Dist[100003], coada[100003];
vector <int> V[100003];
queue < int > Q;

void bfs()
{
   Dist[val] = 0; //atribuim distantei de plecare valoarea 0
   Q.push(val);  //adaugam in coada prima valoare

   while ( !Q.empty()) //cat timp coada nu e vida
   {
       int nod = Q.front();//extragem varful
       Q.pop();//eliminam varful

       for(auto curent : V[nod]) //parcurgem vectorul de arce al nodului
       {
           if ( Dist[curent] == -1 ) //daca inca nu am gasit un drum potrivit
           {
               Dist[curent] = Dist[nod] + 1; //distanta curenta devine distanta nodului+1

               Q.push(curent);
           }
       }
   }
}

int main()
{
   f >> n >> m >> val;

   for ( int i = 1 ; i <= m ; i++ )
   {
       f >> x1 >> x2;

       V[x1].push_back(x2);
   }

   for ( int i = 1 ; i <= n ; i ++ )
       Dist[i] = -1 ;

   bfs();

   for ( int i = 1 ; i <= n ; i ++ )
       g << Dist[i] << " ";

}