Cod sursa(job #628850)

Utilizator cremarencodianaCremarenco Diana cremarencodiana Data 2 noiembrie 2011 11:16:26
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
# include<stdio.h>
# include<vector>
using namespace std;
vector<int> v[100010];
int x,a[100010],u,p,d[100010],y,s,n,m,i,tata[100010];
bool viz[100010],ok;
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);
	}
	for (i=1; i<=n; i++)
	{
		viz[i]=false; tata[i]=0; d[i]=1000000;
	}
	a[1]=s;
	viz[s]=true; d[s]=0;
	u=1; p=1;
	ok=true;
	/*for (i=1; i<=n; i++)
	{
	for (vector<int> :: iterator it=v[i].begin(); it!=v[i].end(); it++)
		printf("%d ",*it);
	printf("\n");
	}*/
	while (ok)
	{
		x=a[p];
		for (vector<int> :: iterator it=v[x].begin(); it!=v[x].end(); it++)
		{
			if (viz[*it]==false)
			{
				u++;
				a[u]=*it;
				viz[*it]=true;
				tata[*it]=p;  d[a[u]]=d[x]+1;
			}
		}
		if (p==u) ok=false;
		p++;
	}
	for (i=1; i<=n; i++)
		if (d[i]!=1000000) printf("%d ",d[i]); else printf("-1 ");
	return 0;
}