Cod sursa(job #409823)

Utilizator NemultumituMatei Ionita Nemultumitu Data 3 martie 2010 21:28:58
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <cstdio>
#include <vector>
using namespace std;
vector <int > a[100050];
int n,m,s;
int coada[1000005];
int cost[100050];

void bfs()
{
	int r=1,p;
	coada[1]=s;
	for (p=1;p<=r;++p)
		for (int i=0;i<a[coada[p%1000000]].size();++i)
			if ((a[coada[p%1000000]][i]!=s&&!cost[a[coada[p%1000000]][i]])||cost[a[coada[p%1000000]][i]]>cost[coada[p%1000000]]+1)
			{
				cost[a[coada[p%1000000]][i]]=cost[coada[p%1000000]]+1;
				if (r>=1000000)
					r=0;
				coada[++r]=a[coada[p%1000000]][i];
			}
}


int main()
{
	freopen ("bfs.in","r",stdin);
	freopen ("bfs.out","w",stdout);
	scanf ("%d%d%d",&n,&m,&s);
	int x,y;
	for (int i=1;i<=m;++i)
	{
		scanf("%d%d",&x,&y);
		a[x].push_back(y);
	}
	bfs();
	for (int i=1;i<=n;++i)
	{
		if (cost[i]==0&&i!=s)
		{
			printf("%d ",-1);
			continue;
		}
		printf("%d ",cost[i]);
	}
	return 0;
}