Cod sursa(job #276500)

Utilizator dan_10Dan Alexandru dan_10 Data 11 martie 2009 10:48:45
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<stdio.h>

struct nod{	int x;
		nod *next;
	    };
nod *v[100010];
long n,m,X;
long s[100010],c[100010],t[100010],pus[100010];

void citire()
{	freopen("bfs.in","r",stdin);
	scanf("%ld %ld %ld",&n,&m,&X);

	long a,b;
	nod *p;
	for(long i=1;i<=m;i++)
	     {	scanf("%ld %ld",&a,&b);
		p=new nod;
		p->x = b;
		p->next = v[a];
		v[a] = p;
	     }
}

void bf(long k)
{      long i=1;
       long j=1;
       
       c[i]=k;
       pus[k]=1;
       t[k]=-1;
       nod *p;		       
	  while(i<=j)
		{	p=v[c[i]];
			  while (p!=NULL)
			   { if (pus[p->x]==0)
				 { j++;
				   pus[p->x]=1;
				   c[j] = p->x;
				   t[c[j]]=c[i];
				   s[p->x] = s[t[c[j]]]+1;
				 }
				p = p->next;
   			    }
	    
			i++;
		}
}
int main()
{	citire();
	bf(X);
	freopen("bfs.out","w",stdout);

	for(long i=1;i<=n;i++)
		{ if(i==X) s[i]=0;
		 if(i!=X && s[i]==0) s[i]=-1;
			printf("%d ",s[i]);
		}  				
	printf("\n");
	return 0;
}