Cod sursa(job #601407)

Utilizator vendettaSalajan Razvan vendetta Data 6 iulie 2011 14:45:37
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>

using namespace std;

typedef vector<int>::iterator it;

vector<int> gf[100001];
int use[100001], x, y, s, n, m, dist[100001];

void bfs (int s){
    queue<int> c;
    memset(dist,-1,sizeof(dist));
    c.push(s);
    use[s]=1;
    dist[s]=0;

    while (!c.empty()){
        for (it i=gf[c.front()].begin();i!=gf[c.front()].end();++i)
            if (0==use[*i]){
                use[*i]=1;
                dist[*i]=dist[c.front()]+1;
                c.push(*i);
            }
        c.pop();
    }
}

int main(){
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    scanf("%d%d%d", &n, &m, &s);
    for (int i=1;i<=m;i++){
        scanf("%d%d", &x, &y);
        gf[x].push_back(y);
    }
    bfs(s);
    for(int i=1;i<=n;++i) printf("%d ", dist[i]);
    return 0;

}