Cod sursa(job #279768)

Utilizator gabor_oliviu1991gaboru corupt gabor_oliviu1991 Data 12 martie 2009 23:09:34
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.51 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;
}