Cod sursa(job #1696578)

Utilizator CodrutLemeniCodrut Lemeni CodrutLemeni Data 29 aprilie 2016 14:34:26
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb


#include <iostream>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#define N 100010

using namespace std;

int parc[N];
std::vector<int> muc[N];
int dist[N];
int grad[N];
int que[N],head,tail;

int deq(){
    return que[tail++];
}
void enq(int x){
    que[head++]=x;
}



int main(){
    int i,n,m,s;
    int x,y,c;

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

    scanf("%d %d %d",&n,&m,&s);

    for(i=0;i<m;i++){
        scanf("%d %d",&x,&y);
        muc[x].push_back(y);
        grad[x]++;
    }

    enq(s);
    parc[s]=1;

    while(tail<head){
        c=deq();

        for(i=0;i<grad[c];i++){
            if(parc[ muc[c][i] ]==0 ){
                enq( muc[c][i] );
                dist[ muc[c][i] ]=dist[c]+1;
                parc[ muc[c][i] ]=1;
            }

        }
    }

    for(i=1;i<=n;i++){
        if(dist[i]==0 && i!=s){
            dist[i]=-1;
        }
        printf("%d ",dist[i]);
    }


    return 0;
}