Cod sursa(job #1681512)

Utilizator marcdariaDaria Marc marcdaria Data 9 aprilie 2016 15:35:11
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
#define NMAX 1000005

using namespace std;


ifstream fin("bfs.in") ;
ofstream fout("bfs.out") ;

int N, M, S, drum[NMAX] ;
vector <int> V[NMAX] ;
queue <int> Q ;

inline void BFS(int nod)
{
    drum[nod] = 0 ;
    Q.push(nod) ;

    while(!Q.empty())
    {

        int nod_nou = Q.front() ;
        Q.pop() ;

        for(vector<int> ::iterator it = V[nod_nou].begin() ; it != V[nod_nou].end() ; ++ it)
            if(drum[*it] == -1)
            {
                drum[*it] += drum[nod_nou] + 2  ;
                Q.push(*it) ;
            }

    }


}

int main()
{

    fin >> N >> M >> S ;

    for(int i = 1 ; i <= M ; ++ i)
    {
        int x, y ;
        fin >> x >> y ;
        V[x].push_back(y) ;
    }

    for(int i=1;i<=N;++i)
    drum[i]=-1;

    BFS(S);


    for(int i = 1 ; i <= N ; ++ i)
        fout << drum[i] << ' ' ;
    fout << '\n' ;

    return 0;
}