Cod sursa(job #1358157)

Utilizator fetti_danutzdezactivat fetti_danutz Data 24 februarie 2015 13:42:11
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

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

#define DIM 100001

int n, m, S;
vector<bool> v;
vector<int> d;
vector<int> G[DIM];
int cont;

void BF(int x);

int main()
{
    fin >> n >> m >> S;
    v.resize(n + 1);
    d.resize(n + 1, -1);
    int x, y;
    for ( int i = 1; i <= m; ++i )
    {
        fin >> x >> y;
        G[x].push_back(y);
    }

    BF(S);

    for ( int i = 1; i <= n; ++i )
        fout << d[i] << ' ';


    fin.close();
    fout.close();
    return 0;
}

void BF(int x)
{
    queue<int> Q;
    Q.push(x);
    d[x] = 0;
    v[x] = true;
    while ( !Q.empty() )
    {
        x = Q.front();
        Q.pop();
        for ( const auto& e : G[x] )
            if ( !v[e] )
            {
                v[e] = true;
                Q.push(e);
                d[e] = d[x] + 1;
            }
    }
};