Cod sursa(job #1695767)

Utilizator AcuasPopescu Nicolae-Aurelian Acuas Data 27 aprilie 2016 19:25:04
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 100005
using namespace std;
ifstream cin("bfs.in");
ofstream cout("bfs.out");
vector<int> a[NMAX];
int n,m,s,viz[NMAX],t[NMAX],nr;
void citire(){
    int x,y,i;
    cin>>n>>m>>s;
    for(i=1;i<=m;i++){
        cin>>x>>y;
        a[x].push_back(y);
    }
}
queue<int> coada;
void BFS(int x){
    coada.push(x);
    viz[x]=1;
    while(!coada.empty()){
        int varf=coada.front();
        vector<int>::iterator it;
        for(it=a[varf].begin();it!=a[varf].end();++it){
            if(viz[*it]==0){
                viz[*it]=1;
                coada.push(*it);
                t[*it]=varf;
            }
        }
        coada.pop();
    }
}
void refac(int nod){
    if(nod){
        refac(t[nod]);
        ++nr;
    }
}
int main(){
    citire();
    BFS(s);
    int j;
    for(j=1;j<=n;j++){
        if(j!=s){
            nr=0;
            refac(j);
            if(nr-1==0)
                cout<<-1<<' ';
            else cout<<nr-1<<' ';
        }
        else
            cout<<0<<' ';
    }
    return 0;
}