Cod sursa(job #1732181)

Utilizator enacheionutEnache Ionut enacheionut Data 21 iulie 2016 00:48:48
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

vector<int> listaAdiacenta[100005];
int distanta[100005];

void AfisareDistanta(int numarNoduri)
{
    ofstream out("bfs.out");

    for( int i = 1; i<=numarNoduri; ++i )
    {
        out<<distanta[i]<<" ";
    }

    out.close();
}

void BFS(int nodSursa, int numarNoduri)
{
    int nod;

    queue<int> coada;
    coada.push(nodSursa);

    fill(distanta, distanta + numarNoduri + 1, -1);
    distanta[nodSursa] = 0;

    while( !coada.empty() )
    {
        nod = coada.front();
        coada.pop();

        for( unsigned int i = 0; i < listaAdiacenta[nod].size(); ++i )
        {
            if( distanta[listaAdiacenta[nod][i]] == -1 )
            {
                distanta[listaAdiacenta[nod][i]] = distanta[nod] + 1;
                coada.push(listaAdiacenta[nod][i]);
            }
        }
    }
}

int main()
{
    int nodSursa;
    int numarNoduri;
    int numarMuchii;

    ifstream in("bfs.in");
    in>> numarNoduri>> numarMuchii>> nodSursa;

    for( int i = 0, nod1, nod2; i<numarMuchii; ++i )
    {
        in>> nod1>> nod2;
        listaAdiacenta[nod1].push_back(nod2);
    }

    BFS(nodSursa, numarNoduri);

    AfisareDistanta(numarNoduri);

    in.close();
    return 0;
}