Cod sursa(job #1835949)

Utilizator raluca1234Tudor Raluca raluca1234 Data 27 decembrie 2016 16:19:51
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#include <vector>
#include <bitset>
#define MAX_N 100000

using namespace std;

int dist[MAX_N+5], c[MAX_N+5];
vector<int>v[MAX_N+5];
bitset<MAX_N+5>f;

void bfs(int nod){
    int prim, ultim, i, l;
    prim=ultim=1;
    c[prim]=nod;
    dist[nod]=0;
    f[nod]=1;
    while (prim<=ultim){
        l=v[c[prim]].size();
        for (i=0; i<l; i++)
            if (!f[v[c[prim]][i]]){
                f[v[c[prim]][i]]=1;
                c[++ultim]=v[c[prim]][i];
                dist[c[ultim]]=dist[c[prim]]+1;
            }
        prim++;
    }
}
int main(){
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
    int n, m, s, i, j, x, y, ans;
    scanf("%d%d%d", &n, &m, &s);
    for (i=1; i<=m; i++){
        scanf("%d%d", &x, &y);
        if (x!=y)
            v[x].push_back(y);
    }
    for (i=1; i<=n; i++)
        dist[i]=-1;
    bfs(s);
    for (i=1; i<=n; i++){
        printf("%d ", dist[i]);
    }
    return 0;
}