Cod sursa(job #1801296)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 8 noiembrie 2016 21:00:05
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
# include <fstream>
# include <deque>
# define DIM 100010
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
struct List{
    int val;
    List *next;
};
deque <int> c;
List *first[DIM],*last[DIM];
int Marcat[DIM],n,m,i,x,y,ns;
void push_back(int x,int y){
    if(first[x]==NULL){
        first[x]=new List;
        first[x]->val=y;
        first[x]->next=NULL;
        last[x]=first[x];
        return;
    }
    List *p;
    p=new List;
    p->val=y;
    p->next=NULL;
    last[x]->next=p;
    last[x]=p;
    return;
}
void bfs(int ns){
    c.push_back(ns);
    Marcat[ns]=1;
    while(!c.empty()){
        int nc=c.front();
        c.pop_front();
        List *p;
        p=first[nc];
        while(p!=NULL){
            int nv=p->val;
            if(!Marcat[nv]){
                Marcat[nv]=Marcat[nc]+1;
                c.push_back(nv);
            }
            p=p->next;
        }
    }
}
int main () {
    fin>>n>>m>>ns;
    for(i=1;i<=m;i++){
        fin>>x>>y;
        push_back(x,y);
    }
    bfs(ns);
    for(i=1;i<=n;i++)
        fout<<Marcat[i]-1<<" ";
    fout<<"\n";
    return 0;
}