Cod sursa(job #1396077)

Utilizator OrolesVultur Oroles Data 22 martie 2015 01:04:11
Problema BFS - Parcurgere in latime Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <list>

struct Nod
{
	std::vector<int> vecini;
};

std::vector<Nod> nodes(100000);
std::vector<int> length(100000,-1);
std::vector<int> visited(100000,0);
std::list< std::pair<int,int> > queue;

void bfs( int source )
{
	queue.push_back( std::pair<int,int>(source,0) );
	length[source] = 0;
	while ( !queue.empty() )
	{
		std::pair<int,int> head = queue.front();
		queue.pop_front();
		visited[head.first] = 1;
		for ( int i = 0; i < nodes[head.first].vecini.size(); ++i )
		{
			int nodId = nodes[head.first].vecini[i];
			if ( visited[nodId] != 1 )
			{
				queue.push_back( std::pair<int,int>( nodId, head.second + 1 ) );
				length[nodId] = head.second + 1;
				visited[nodId] = 1;
			}
		}		
	}
}

int main( int argc, char* argv[] )
{
	std::ifstream input("bfs.in");
	std::ofstream output("bfs.out");

	int n,m,s;
	input >> n;
	input >> m;
	input >> s;
	for ( int i = 0; i < m; ++i )
	{
		int first, second;
		input >> first;
		input >> second;
		nodes[first].vecini.push_back(second);
	}

	bfs(s);
	for ( int i = 1; i <= n ; ++i )
	{
		output << length[i] << " ";
	}

	input.close();
	output.close();	
	return 0;
}