Cod sursa(job #1011129)

Utilizator Barcau_EmanuelBarcau Emanuel Barcau_Emanuel Data 16 octombrie 2013 11:18:54
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include<stdio.h>
#define N 100001
 
struct nod{int info;
           nod *urm;} *lista[N], *p;
            
int sol[N], coada[N], vf;
            
void BFS(int vf)
{
             int prim, ultim, nod_cur;
              
             for(int i = 1; i <= N; i++)
                     sol[i] = -1, coada[i] = 0;
              
             prim = ultim = 1;
                                       
             coada[prim] = vf;
             sol[vf] = 0;
 
             while(prim <= ultim)
         {
                           nod_cur = coada[prim];
                           for(p = lista[nod_cur]; p; p = p->urm)
                 if(sol[p->info] == -1)
                                 {
                                       coada[++ultim] = p->info;
                                       sol[p->info] = sol[nod_cur] + 1;
                                 }
                           prim++;
             }
}                                      
              
            
int main()
{
          freopen("bfs.in","r", stdin);
          freopen("bfs.out","w", stdout);
           
          int i, n, m, x, y;
           
          scanf("%d %d %d", &n, &m, &vf);
          for(i = 1; i <= m; i++)
          {
                  scanf("%d %d", &x, &y);
                   
                  p = new nod;
                  p->info = y;
                  p->urm = lista[x];
                  lista[x] = p;
 
      }
 
          BFS(vf);
 
      for(i = 1; i <= n; i++)
        printf("%d ", sol[i]);
          return 0;
}