Cod sursa(job #360364)

Utilizator amadaeusLucian Boca amadaeus Data 31 octombrie 2009 11:26:56
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

int n,m,s,i,x,y;
int u[100003];
vector<int> a[100003];
queue<int> Q;

#define TR(C,it) \
	for( typeof(C.begin()) it = C.begin(); it != C.end(); it++ )

#define pb push_back

void bfs()
{
	int i,l,j,v;
	Q.push( s );
	u[s]=1;
	while( ! Q.empty() )
	{
		v = Q.front(); Q.pop();
		TR( a[v], i )
			if( !u[*i])
			{
				u[*i] = u[v] + 1;
				Q.push( *i );
			}
	}
}

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