Cod sursa(job #1755423)

Utilizator lucian666Vasilut Lucian lucian666 Data 10 septembrie 2016 08:38:28
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb


#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <bitset>

#define dim 100009
#define pb push_back
#define INF 0x3f3f3f3f
using namespace std;
ofstream out("bfs.out");

bitset < dim > uz;
queue < int > Q;
int n, dist[dim], S;
vector <int>G[dim];

void read();
void bfs(int nood);

int main()
{
    read();
    bfs(S);

    for(int i = 1 ; i<=n; ++i)
        if(dist[i] == INF)
        {
           out << -1 << " ";
        }
        else
        {
            out << dist[i] << " ";
        }

    return 0;

}

void read()
{
    ifstream in("bfs.in");
    int m;

    in >> n >> m >> S;

    for(int x,y; m; --m)
    {
        in >> x >> y;
        G[x].pb(y);
    }
}

void bfs(int root)
{
    for(int i = 1; i<=n; ++i)
        dist[i] = INF;

    dist[root] = 0;
    Q.push(root);

    while(!Q.empty())
    {
        int k = Q.front();
        Q.pop();

        for(vector < int>:: iterator I = G[k].begin(); I!= G[k].end(); ++I)
            if(dist[*I] == INF)
        {
            dist[*I] = dist[k] + 1;
            Q.push(*I);
        }
    }
}