Cod sursa(job #798361)

Utilizator cremarencodianaCremarenco Diana cremarencodiana Data 16 octombrie 2012 15:00:04
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
# include <stdio.h>
# include <vector>
using namespace std;
vector <int> v[100010];
int q[100010],n,m,s,p,u,l[100010],t[100010],i,x,y,nod;
bool viz[100010];
int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	scanf("%d %d %d\n",&n,&m,&s);
	for (i=1; i<=m; i++)
	{
		scanf("%d %d\n",&x,&y);
		if (x!=y)
		v[x].push_back(y);
	}
	p=u=1;
	q[1]=s;
	for (i=1; i<=n; i++) 
		l[i]=100000;
	l[s]=0; t[s]=0; viz[s]=true;
	while(p<=u)
	{
		nod=q[p];
		for (vector <int>:: iterator it=v[nod].begin(); it<v[nod].end(); it++)
			if (viz[*it]==false)
			{
				viz[*it]=true;
				t[*it]=nod;
				u++;
				q[u]=*it;
				l[q[u]]=l[nod]+1;
			}
		p++;
	}
	for (i=1; i<=n; i++)
		if (l[i]!=100000) printf("%d ",l[i]); else printf("-1 ");
	printf("\n");
	return 0;
}