Cod sursa(job #658853)

Utilizator irene_mFMI Irina Iancu irene_m Data 9 ianuarie 2012 18:24:07
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

const int MAX_N = 100002;
const char infile[] = "bfs.in";
const char outfile[] = "bfs.out";

vector < int > G[ MAX_N ];
queue < int > Q;
int use[ MAX_N ], cost[ MAX_N ];
int N, M, S;

void read(){
	FILE *f;
	int x, y;
	f = fopen( infile, "rt" );
	fscanf( f, "%d %d %d", &N, &M, &S );
	for( ; M; M-- ){
		fscanf( f, "%d %d", &x, &y );
		G[ x ].push_back( y );
	}
}

void bfs( int node ){
	int new_node;
	vector < int > :: iterator it;
	for( int i = 1; i <= N; ++i )
		cost[ i ] = -1;

	cost[ node ] = 0;
	use[ node ] = 1;
	Q.push( node );

	while( !Q.empty() ){
		new_node = Q.front();
		Q.pop();
		for( it = G[ new_node ].begin(); it != G[ new_node ].end();
				++it )
			if( !use[ *it ] ){
				use[ *it ] = 1;
				cost[ *it ] = cost[ new_node ] + 1;
				Q.push( *it );
			}
	}
}

void write(){
	FILE *g;
	g = fopen( outfile, "wt" );
	for( int i = 1; i <= N; ++i )
		fprintf( g, "%d ", cost[ i ] );
}

int main(){
	read();
	bfs( S );

	write();
	return 0;
}