Cod sursa(job #1265205)

Utilizator AnesthesicChereches Sergiu Alexandru Anesthesic Data 16 noiembrie 2014 21:38:12
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
#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;
}