Cod sursa(job #682241)

Utilizator EstarDaian Dragos Estar Data 18 februarie 2012 19:19:13
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#include <vector>
#include <queue>

using namespace std;

struct graf{
    int d,v;
    vector<int> next;
    graf(){
        d=-1;
        v=0;
    }
};

int main(){
    vector<graf> orientat;
    queue<pair<int , int> > coada;
    int s;
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
    int n , m;
    scanf("%d %d %d ", &n, &m, &s);
    orientat.assign(n,graf());
    orientat[s-1].d=0;
    for(int i=0;i<m;i++){
        int x , y;
        scanf("%d %d",&x,&y);
        orientat[x-1].next.push_back(y-1);
    }
    coada.push(make_pair(s-1,0));
    while(coada.size()){
        int nod = coada.front().first,d=coada.front().second;
        coada.pop();
    for(int i=0;i<(signed)orientat[nod].next.size();i++){
        if(d<orientat[orientat[nod].next[i]].d||orientat[orientat[nod].next[i]].d==-1){
        orientat[orientat[nod].next[i]].d=d+1;
        coada.push(make_pair(orientat[nod].next[i], d+1));
        }
    }
    }
    for(int i=0;i<n;i++)
    printf("%d ",orientat[i].d);
}