Pagini recente » Cod sursa (job #92444) | Cod sursa (job #1314538) | Cod sursa (job #2043630) | Cod sursa (job #1133563) | Cod sursa (job #2671140)
#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] << " ";
}