Pagini recente » Cod sursa (job #2292474) | Cod sursa (job #693410) | Cod sursa (job #377080) | Cod sursa (job #1338442) | Cod sursa (job #2667899)
#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 ( i = 0 ; i <= V[nod].size() - 1 ; i ++ ) /// parcurgem vectorul de arce al nodului curent
{
int curent = V[nod][i]; ///retinem nodul curent
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++ ) ///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;
}