Cod sursa(job #553872)

Utilizator Radu_BumbaceaRadu Bumbacea Radu_Bumbacea Data 14 martie 2011 13:12:53
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <stdio.h>
#include<vector>
using namespace std;

const int N=100001;
int n,m,s;
vector <int> a[N];
int b[N],c[N],down,up;
void bfs(int nod)
{
	for (int i=0;i<a[nod].size();i++)
		if (b[a[nod][i]]==0&&a[nod][i]!=s)
		{
			b[a[nod][i]]=b[nod]+1;
			c[++up]=a[nod][i];
		}
}
int main()
{
	int x,y;
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	scanf("%d%d%d",&n,&m,&s);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&x,&y);
		a[x].push_back(y);
		//a[y].push_back(x);
	}
	b[s]=0;
	c[1]=s;down=1;up=1;
	while (down<=up)
	{
		bfs(c[down]);
		down++;
	}
	for(int i=1;i<=n;i++)
	{
		if (b[i]==0)
		{
			if (i==s) printf("0 ");
			else printf("-1 ");
		}
		else printf("%d ",b[i]);
	}
}