Cod sursa(job #1276108)

Utilizator Corina1997Todoran Ana-Corina Corina1997 Data 25 noiembrie 2014 22:42:18
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

ifstream is("bfs.in");
ofstream os("bfs.out");

int n, m, S, x, y;
vector<vector<int> > G;
vector<int> d;
vector<bool> s;
queue<int> Q;
#define INF 0x3f3f3f3f

void BFS( int k );

int main()
{
    is >> n >> m >> S;
    G.resize(n+1);
    d.resize(n+1, INF);
    s.resize(n+1, false);
    for ( int i = 1; i <= m; i++ )
    {
        is >> x >> y;
        G[x].push_back(y);
    }
    BFS(S);
    for ( int i = 1; i <= n; i++ )
        if ( d[i] == INF )
            os << "-1" << ' ';
        else
            os << d[i] << ' ';
    is.close();
    os.close();
    return 0;
}

void BFS( int k )
{
    d[k] = 0;
    s[k] = true;
    Q.push(k);
    int i;
    while ( !Q.empty() )
    {
        i = Q.front();
        Q.pop();
        for ( const auto& y : G[i] )
            if ( !s[y] )
            {
                d[y] = d[i] + 1;
                Q.push(y);
                s[y] = true;
            }

    }

}