Pagini recente » Cod sursa (job #2988756) | Cod sursa (job #1310266) | Cod sursa (job #1107349) | Cod sursa (job #659296) | Cod sursa (job #2667904)
#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;
vector <int>::iterator it;
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 ( it = V[nod].begin(); it < V[nod].end(); it ++ ) /// parcurgem vectorul de arce al nodului
{
if ( Dist[*it] == -1 ) ///daca inca nu am gasit un drum potrivit
{
Dist[*it] = Dist[nod] + 1; ///distanta curenta devine distanta nodului+1
Q.push(*it);
}
}
}
}
int main()
{
f >> n >> m >> val;
for ( int i = 1 ; i <= m ; i++ ) ///creem vectorul de arce
{
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] << " "; ///afisam distantele
return 0;
}