Cod sursa(job #586323)

Utilizator biroBiro Alexandru biro Data 30 aprilie 2011 14:36:22
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <algorithm>
#define DIM 100000

using namespace std ;

int coada[DIM] ;
int rez[DIM] ;

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

nod *L[DIM];

void adauga( nod *& cap, int info) {
  nod * p = new nod;
  p->info = info;
  p->next = cap;
  cap = p;
}

int main () {
  freopen ("bfs.in","r",stdin) ;
  freopen ("bfs.out","w",stdout) ;

  int n , m  , s ;
  scanf ("%d%d%d" , &n , &m , &s) ;

  int x , y ;
  for (int i=1 ; i<=m ; ++i) {
    scanf ("%d%d" , &x , &y);
    adauga (L[x],y);
  }
  for (int i=1 ; i<=n ; ++i)
    rez[i]=-1 ;
  rez[s]=0 ;
  
  coada[1]=s ;
  int inceput=1 ;
  int sfarsit=1 ;
  
  int pas ;
  while (inceput<=sfarsit) {
    pas=rez[coada[inceput]]+1 ;
    int i = coada[inceput];
    for ( nod *p = L[i]; p; p = p->next) {
      if (rez[p->info]==-1) {
        coada[++sfarsit]=p->info ;
        rez[p->info]=pas ;
      }
    }
    inceput++ ;
  }
  for (int i=1 ; i<=n ; ++i) {
    printf ("%d " , rez[i]);
  }

  return 0;
}