Cod sursa(job #1424321)

Utilizator Burbon13Burbon13 Burbon13 Data 23 aprilie 2015 23:07:59
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>

using namespace std;

const int nmx = 100005;

int n, m, s;
int dist[nmx];
vector <int> G[nmx];
queue <int> Q;

inline void bfs(){
    memset(dist, -1, sizeof(dist));
    Q.push(s);
    dist[s] = 0;
    while(not Q.empty()){
        int val = Q.front();
        Q.pop();
        for(vector<int>::iterator it = G[val].begin(); it != G[val].end(); ++it)
            if(dist[*it] == -1){
                dist[*it] = dist[val] + 1;
                Q.push(*it);
            }
    }
}

int main(){
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);

    scanf("%d %d %d",&n, &m, &s);
    for(int i = 0; i < m; ++i){
        static int x, y;
        scanf("%d %d", &x, &y);
        G[x].push_back(y);
    }

    bfs();

    for(int i = 1; i <= n; ++i)
        printf("%d ", dist[i]);

    return 0;
}