Cod sursa(job #627329)

Utilizator paul24090FMI - Balauru Paul paul24090 Data 29 octombrie 2011 17:00:29
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>
#include <list>

using namespace std;

int n,m,s;
int c[100002],d[100002],v[100002];

list<int> l[100002];
list<int>::iterator itl;

void citire()
{
	int x,y;
	for(int i=1;i<=m;i++)
	{
		scanf("%d %d", &x, &y);
		l[x].push_back(y);
	}
}

void bfs(int s)
{
	d[s]=0;
	c[1]=s;
	v[s]=1;
	int p,u;
	p=1;u=1;
	while(p<=u)
	{
		for(itl=l[c[p]].begin();itl!=l[c[p]].end();++itl)
			if(v[*itl]==0)
			{
				u++;
				c[u]=*itl;
				v[*itl]=1;
				d[*itl]=d[c[p]]+1;
			}
		p++;
	}
	for(int i=1;i<=n;i++)
		if(d[i]==0 && i!=s)
			d[i]=-1;
}

void afisare()
{
	/*for(int i=1;i<=n;i++)
	{
		printf("%d: ", i);
		for(itl=l[i].begin();itl!=l[i].end();++itl)
			printf("%d ",*itl);
		printf("\n");
	}*/
	for(int i=1;i<=n;i++)
		printf("%d ",d[i]);
	printf("\n");
}

int main()
{
	freopen("bfs.in","rt",stdin);
	freopen("bfs.out","wt",stdout);
	
	scanf("%d %d %d", &n, &m, &s);
	citire();
	bfs(s);
	afisare();
	return 0;
}