Cod sursa(job #2156735)

Utilizator KazvikKokovics Razvan Kazvik Data 8 martie 2018 23:01:05
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#define NMAX 100005
#include <queue>

using namespace std;

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

int n,m,s,viz[NMAX],nr[NMAX];

typedef struct nod{
    int x;
    nod *urm;
}*pNod;

pNod v[NMAX];
pNod p;

void add(pNod &dest,int val){
    pNod p;
    p=new nod;
    p->x=val;
    p->urm=dest;
    dest=p;
}

void citire(){
    int x,y;
    in>>n>>m>>s;
    for(int i=1;i<=m;i++){
        in>>x>>y;
        add(v[x],y);
    }
}

void BFS(int x){
    queue<int>coada;
    coada.push(x);
    int l=0;
    viz[x]=1;
    while(!coada.empty()){
        int aux=coada.front();
        coada.pop();
        l++;
        p=v[aux];
        while(p!=NULL){
            if(viz[p->x]==0){
                coada.push(p->x);
                nr[p->x]=l;
                viz[p->x]=1;
            }
            p=p->urm;
        }
    }
}

int main()
{
    citire();
    BFS(s);
    for(int i=1;i<=n;i++){
        if(nr[i]==0 && viz[i]==0)
            out<<-1<<" ";
        else
            out<<nr[i]<<" ";
    }
    return 0;
}