Cod sursa(job #288096)

Utilizator warangeldinu sorin warangel Data 25 martie 2009 15:56:03
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<cstdio>
#include<vector>

using namespace std;

const long N=100005;

vector<long> a[N];
vector<long>::iterator it;
int d[N];
long n,m,s;
long x,y;
long coada[N],cs,ce;
long sel[N];

void citire()
{
	scanf("%ld %ld %ld",&n,&m,&s);
	for(;m--;)
	{
		scanf("%ld %ld",&x,&y);
		a[x].push_back(y);
	}
}

void bfs()
{
	coada[0]=s; ce=cs=0;
	sel[s]=1;
	while(cs<=ce)
	{
		for(it=a[coada[cs]].begin();it!=a[coada[cs]].end();++it)
			if(!sel[*it])	
			{
				d[*it]=d[coada[cs]]+1;
				coada[++ce]=*it;
				sel[*it]=1;
			}
		cs++;
	}
}

void afisare()
{
	for(long i=1;i<=n;i++)
		if(d[i]||i==s)printf("%ld ",d[i]);
		else printf("-1 ");
}

int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	citire();
	bfs();
	afisare();
	return 0;
}