Cod sursa(job #838641)

Utilizator TripluYOlteanu Costin TripluY Data 20 decembrie 2012 09:00:49
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

int n,m,s;

vector <int> *lista_adiacenta;
int *distanta;
queue < pair<int,int> > noduri_de_parcurs;

inline void citire()
{
    ifstream f("bfs.in");
    f>>n>>m>>s;
    --s;
    lista_adiacenta = new vector <int> [n];
    distanta = new int[n];
    int x,y;
    for(int i=0;i!=m;++i)
    {
        f>>x>>y;
        --x;--y;
        lista_adiacenta[x].push_back(y);
        distanta[i]=-1;
    }
    f.close();
}

inline void expand(int nod,int adancime_noua)
{
    distanta[nod] = adancime_noua;
    ++adancime_noua;
    for(unsigned int i = 0; i != lista_adiacenta[nod].size(); ++i)
        if(distanta[lista_adiacenta[nod][i]] == -1)
            noduri_de_parcurs.push(make_pair(lista_adiacenta[nod][i],adancime_noua));
}

inline void afisare()
{
    ofstream g("bfs.out");
    g<<distanta[0];
    for(int i=1; i != n; ++i)
        g<<" "<<distanta[i];
    g.close();
}

int main()
{
    citire();
    noduri_de_parcurs.push(make_pair(s,0));
    pair <int,int> nod_nou;
    while(!noduri_de_parcurs.empty())
    {
        nod_nou = noduri_de_parcurs.front();
        noduri_de_parcurs.pop();
        expand(nod_nou.first,nod_nou.second);
    }
    afisare();
    return 0;
}