Cod sursa(job #1650095)

Utilizator alexloxNecula Alexandru alexlox Data 11 martie 2016 16:30:26
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
//http://www.infoarena.ro/problema/bfs - 20 pct
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>

using namespace std;

#define MAXN 100005

ifstream f("bfs.in");
ofstream g("bfs.out");

int n, m, s, prim, ultim, c[MAXN], o;
vector <int> G[MAXN];
bitset <MAXN> v;

void Read()
{
    int b, y;
    f >> n >> m >> s;
    for(int i = 1; i <= m; i++)
        f >> b >> y, G[b].push_back(y);
}

void bfs(int x[])
{
    int varf, i;
    o = 0; x[s] = 0;
    bool p = 1;
    while(prim <= ultim)
    {
        if(p)
            o++;
        p = 0;
        varf = c[prim];
        for(int k = 0; k < G[varf].size(); k++)
        {
            i = G[varf][k];
            if(v[i] == 0)
                ultim++, c[ultim] = i, v[i] = 1, x[i] = o, p = 1;
        }
        prim++;
    }
}

int main()
{
    int x[10000];
    Read();
    for(int i = 1; i <= n; i++)
        x[i] = -1;
    prim = ultim = 1;
    c[prim] = s;
    v[s] = 1;
    bfs(x);
    for(short i = 1; i <= n; i++)
            cout << x[i] << " ";
    return 0;
}