Cod sursa(job #427622)

Utilizator hendrikHendrik Lai hendrik Data 28 martie 2010 07:05:07
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
#include <algorithm>
using namespace std;

void open(){
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
};

#define pb push_back
#define sz size()
#define MAXN 100010
const int oo=(int)1e9;
int n,m,c,a,b,head,tail,q[MAXN],mat[MAXN];
bool used[MAXN];
vector<int>g[MAXN];

int main(){
    open();
    scanf("%d%d%d",&n,&m,&c);
    for (int i=0;i<m;i++){
        scanf("%d%d",&a,&b);
        g[a].pb(b);
    }
    head=tail=0;
    q[tail++]=c;
    for (int i=1;i<=n;i++) mat[i]=oo;
    mat[c]=0;
    used[c]=1;
    while (head<tail){
        int top=q[head++];
        for (vector<int>::iterator it=g[top].begin();it!=g[top].end();it++){
            if (used[*it]) continue;
            used[*it]=1;
            mat[*it]=mat[top]+1;
            q[tail++]=*it;
        }
    }
    for (int i=1;i<=n;i++){
        if (i>1) printf(" ");
        if (mat[i]==oo) mat[i]=-1;
        printf("%d",mat[i]);
    }
    printf("\n");
    return 0;
}