Cod sursa(job #266827)

Utilizator ditiBilescu Adrian diti Data 26 februarie 2009 10:02:14
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include<stdio.h>
#define MAX 1200000
struct nod{
             int info;
             nod *adress; 
 
          };
nod*p[MAX];

long pasi[MAX],vizitat[MAX],coada[MAX],st=1,dr=1;
void adauga(long  x, long y)
{
 	nod *element=new nod;
 	element->info=y;
	if (p[x]==NULL)
	 {
		 p[x]=element;
			element->adress=NULL;
		}
	else
		{
			element->adress=p[x];
			p[x]=element;
		}
}
void bfs(long a)
{
    while(st <= dr)
     {
       nod *e=p[coada[st]];           
       while(e!=NULL)
        {
         if(vizitat[e->info]==0)
          {++dr;
           coada[dr]=e->info;
           pasi[e->info]=pasi[coada[st]]+1;
           vizitat[e->info]=1;
           ++dr;
          }
        e=e->adress;
       }
     ++st;
     }
}

int main()
{
 int n,m,s,x,y;
 
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
   scanf("%ld%ld%ld",&n,&m,&s);

  for(int i=1;i<=m;++i)
   {
     scanf("%ld%ld",&x,&y);
     adauga(x,y);
    }
   coada[1]=s;
   vizitat[s]=1;
    
 bfs(s);
	for(int i=1;i<=n;++i)
	   {
     if(pasi[i]==0)
       {
        if(i==s)
          printf("0 ");
        else
          printf("-1 ");
       }
      else
       printf("%ld ",pasi[i]);
    }   
return 0;
}