Cod sursa(job #802318)

Utilizator dm1sevenDan Marius dm1seven Data 26 octombrie 2012 14:58:10
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#include <list>

//int e_013_bfs()
int main()
{
	int N, M, S;
	const int MAX_N = 100000;
	string in_file = "bfs.in";
	string out_file = "bfs.out";

	list<int> adj_lists[MAX_N + 1];	

	ifstream ifs;
	ifs.open(in_file.c_str());
	ifs>>N>>M>>S;
	for (int e = 1; e <= M; e++)
	{
		int v1, v2;
		ifs>>v1>>v2;
		adj_lists[v1].push_back(v2);		
	}
	ifs.close();

	int levels[MAX_N + 1];
	for (int v = 1; v <= N; v++) levels[v] = -1;

	list<int> queue_;
	queue_.push_back(S);
	levels[S] = 0;

	while ( !queue_.empty() )
	{
		int u = queue_.front();
		queue_.pop_front();
		for (list<int>::iterator it = adj_lists[u].begin(); it != adj_lists[u].end(); it++)
		{
			int v = *it;
			if (levels[v] < 0)//no yet processed
			{
				//put v in queue
				queue_.push_back(v);				
				//update the level
				levels[v] = levels[u] + 1;				
			}
		}
	}

	ofstream ofs(out_file.c_str());
	for (int v = 1; v <= N; v++) ofs<<levels[v]<<" ";
	ofs.close();

	return 0;
}