Cod sursa(job #2200973)

Utilizator bojemoiRadu Mamaliga bojemoi Data 2 mai 2018 23:07:27
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<fstream>
using namespace std;

ifstream cin("bfs.in");
ofstream cout("bfs.out");

struct nod{
    int val;
    nod *next;
};

int n, st;
long m;
nod *l[100005], *p, *v;
int viz[100005];

void coadainser(int x){
    nod *r; r=new nod; r->val=x; r->next=NULL;
    if(!p) p=r, v=r;
    else{v->next=r; v=r;}
}
int coadaextrag(){
    nod *r; r=p;
    p=p->next;
    int x = r->val;
    delete r;
    return x;
}

void add(int x, int y){
    nod *r; r=new nod; r->val=y; r->next=NULL;
    if(!l[x]) l[x]=r;
    else{   r->next=l[x];    l[x]=r;         }
}
void bfs(){
    while(p){
        int nd = coadaextrag();
        nod *r; r=l[nd];
        while(r){
            if(!viz[r->val]){ viz[r->val]=viz[nd]+1;
            coadainser(r->val);}
            r=r->next;
        }
    }
}

int main(){
    cin>>n>>m>>st;

    while(m--){
        int x, y;
        cin>>x>>y;
        add(x, y);
    }
    coadainser(st); viz[st]=1;
    bfs();

for(int i=1; i<=n; ++i){
        if(viz[i]==0) cout<<-1<<"  ";
        else cout<<viz[i]-1<<"  ";
}

    return 0;
}