Cod sursa(job #1690517)

Utilizator emity03Vrabie Vladislav emity03 Data 15 aprilie 2016 11:09:50
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>

using namespace std;

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

typedef struct nod
{
       int nr;
       nod *next;
}* graf;
graf a[100005];

int N,M,x,y,S;
int c[100005],par[100005];
bool viz[100005];

void bfs(){
     int st=1,dr=1;
     par[1]=S;
     viz[S]=1;
     while(st<=dr){
                   for(graf p=a[par[st]];p!=NULL;p=p->next){
                            if(!viz[p->nr]){
                                              par[++dr]=p->nr;
                                              c[p->nr]=c[par[st]]+1;
                                              viz[p->nr]=1;
                            }
                   }
     st++;
     }
}

void add(graf &p, int n)
{
    graf r=new nod;
    r->nr=n;
    r->next=p;
    p=r; 
     
}     
   
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    cin>>N>>M>>S;
    
    for(int i=1; i<=M; ++i)
    {
     cin>>x>>y;
     add(a[x],y);
    }
    
    bfs();
    for(int i=1;i<=N;i++){
            if(i==S)cout<<0<<" ";
            else if(c[i]==0)cout<<-1<<" ";
            else cout<<c[i]<<" ";
    }
return 0;
}