Pagini recente » Cod sursa (job #305042) | Cod sursa (job #1947938) | Cod sursa (job #3182585) | Cod sursa (job #1763588) | Cod sursa (job #1265205)
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
using namespace std;
#define nmax 100005
#define pb push_back
#define p push
ifstream fin ("bfs.in");
ofstream fout ("bfs.out");
vector <int> v[nmax];
queue <int> q;
int n, m, s, i, x, y;
int dist[nmax];
void bfs(){
int current;
while(!q.empty()){ // cat timp avem elemente in coada
current = q.front(); // current o sa ne fie primul element din coada
for(i=0; i<v[current].size(); i++){ // parcurgem vecinii nodului curent
if(dist[v[current][i]] == -1){ // daca dist[vecin[current][i]]==-1 inseamna ca nodul e nemarcat
q.p(v[current][i]); // bagam nodul nemarcat in coada;
dist[v[current][i]] = dist[current] + 1; // il marcam ca vizitat
}
}
q.pop(); // eliminam nodul de la inceputul listei ca sa ne putem ocupa de vecinul lui
}
}
int main(){
fin >> n >> m >> s;
for(i=1; i<=m; i++){
fin >> x >> y;
v[x].pb(y); // cream lista de adiacenta.
}
for(i=1; i<=n; i++) dist[i] = -1; // initial umplem vectorul de distante de la sursa la un nod cu -1
dist[s] = 0; // mereu nodul sursa si nodul respectiv acesteia va avea distanta 0
q.p(s); // bagam nodul sursa in coada, cu el vom incepe "parcurgerea"
bfs();
for(i=1; i<=n; i++) cout << dist[i] << " "; // afisam distantele pentru fiecare nod
return 0;
}