Cod sursa(job #699429)

Utilizator arch_enemyAngela Gossow arch_enemy Data 29 februarie 2012 19:17:17
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
#include <queue>
#include <vector>
#include <cstring>

using namespace std;

#define NMAX 100001
#define INF 0x3f3f3f3f
#define pb push_back

int N, M, i, x, y, Sursa;
int D[NMAX];
vector< int > G[NMAX];
bool Used[NMAX];
queue< int > Q;

int main()
{
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);
	
	scanf("%d%d%d", &N, &M, &Sursa );
	for( ; M--; )
	{
		scanf("%d%d", &x, &y );
		G[x].pb( y );
	}
	
	Q.push( Sursa );
	memset( D, INF, sizeof(D) );
	D[Sursa] = 0;
	memset( Used, false, sizeof(Used) );
	Used[Sursa] = true;	
	while( !Q.empty() )
	{
		int Nod = Q.front(); Q.pop();
		for( vector< int >::iterator it = G[Nod].begin(); it != G[Nod].end(); ++it )
			if( !Used[*it] )
			{
				Used[*it] = true;
				D[*it] = D[Nod] + 1;
				Q.push( *it );
			}
	}
	
	for( i = 1; i <= N; ++i )
		printf("%d ", ( D[i] == INF ) ? -1 : D[i] );
	printf("\n");
	
	return 0;
}