Cod sursa(job #440911)

Utilizator darrenRares Buhai darren Data 12 aprilie 2010 17:36:41
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<fstream>
#include<queue>
#include<vector>
using namespace std;

void read();
void bfs();
void write();

int n, m, s;
vector<bool> selected(100005);
vector<vector<int> > mat(100005);
vector<int> road(100005);
queue<int> q;

int main()
{
	read();
	bfs();
	write();
	return 0;
}

void read()
{
	ifstream fin( "bfs.in" );
	fin >> n >> m >> s;
	for ( int i = 0; i < m; ++i )
	{
		int x, y;
		fin >> x >> y;
		mat[x].push_back(y);
	}
	fin.close();
}

void bfs() 
{
	q.push(s);
	int act = s;
	
	road[act] = 0;
	
	while ( !q.empty() )
	{
		act = q.front();
		selected[act] = true;
		for ( vector<int>::iterator i = mat[act].begin(); i < mat[act].end(); ++i )
			if ( !selected[*i] )
			{
				selected[*i] = true;
				road[*i] = road[act] + 1;
				q.push( *i );
			}
		q.pop();
	}
}

void write()
{
	ofstream fout( "bfs.out" );
	for ( int i = 1; i < 1 + n; ++i )
	{
		if ( selected[i] || i == s )
			fout << road[i] << ' ';
		else
			fout << -1 << ' ';
	}
	fout.close();
}