Cod sursa(job #234081)

Utilizator sima_cotizoSima Cotizo sima_cotizo Data 19 decembrie 2008 22:12:06
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <vector>
#include <cstdio>
#include <queue>
using namespace std;
#define MAX 100010

int S, N, M;
vector<int> A[MAX];
int P[MAX];

void load() {
	freopen( "bfs.in", "r", stdin );
	freopen( "bfs.out", "w", stdout );

	scanf( "%d %d %d", &N, &M, &S);
	while ( M-- ) {
		int x,y;
		scanf( "%d %d", &x, &y );
		A[x].push_back(y);
//		A[y].push_back(x);
	}
}

void bfs( int r ) {
	memset( P, 0x3f, sizeof(int)*(N+1) );
	queue<int> Q;
	Q.push(r);
	P[r] = 0;
	while ( !Q.empty() ) {
		int x = Q.front();
		Q.pop();
		for ( vector<int>::iterator it = A[x].begin(); it!=A[x].end(); ++it )
			if ( P[ *it ] == 0x3f3f3f3f ) {
				P[ *it ] = P[x] + 1;
				Q.push( *it );
			}
	}

	for ( int i=1; i<=N; ++i ) 
		printf( "%d ", P[i] != 0x3f3f3f3f ? P[i] : -1 );
}

int main() {
	load();
	bfs( S );
	return 0;
}