Cod sursa(job #933117)

Utilizator gabrielvGabriel Vanca gabrielv Data 29 martie 2013 17:09:02
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <cstdio>
#include <vector>
#include <deque>

using namespace std;

#define NMAX 100020

int N,M,S;

int A[NMAX];

bool used[NMAX];

vector < int > G[NMAX];
vector < int > :: iterator it;

deque < int > D;

void Read() {

    freopen("bfs.in","r",stdin);

    int i,x,y;

    scanf("%d%d%d",&N,&M,&S);

    for(i=1;i<=M;i++) {

        scanf("%d%d",&x,&y);
        G[x].push_back(y);
    }
}

void BFS() {

    int nod;
    D.push_back(S);
    used[S]=true;

    while(!D.empty()) {

        nod=D.front();
        D.pop_front();

        for(it=G[nod].begin();it!=G[nod].end();++it) {
            if(used[*it])
                continue;
            used[*it]=true;
            D.push_back(*it);
            A[*it]=A[nod]+1;
        }
    }
}

void Print() {

    freopen("bfs.out","w",stdout);

    for(int i=1;i<=N;i++) {

        if(A[i]==0 && i!=S)
            printf("-1 ");
        else
            printf("%d ",A[i]);
    }

    printf("\n");
}

int main() {

    Read();
    BFS();
    Print();
    return 0;
}