Cod sursa(job #794646)

Utilizator hasegandaniHasegan Daniel hasegandani Data 6 octombrie 2012 18:43:42
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

const int Nmax = 100010;

int N,M,S;
vector<int> L[Nmax];
int sol[Nmax];

void solve()
{
	int current;
	queue< int > q; 
	vector<int>::iterator it;

	sol[S] = 1;
	q.push(S);

	while (!q.empty())
	{
		current = q.front();
		q.pop();

		it = L[current].begin();
		for(; it != L[current].end() ; ++it)
			if (!sol[ (*it) ])
			{
				sol[ (*it) ] = sol[ current ] + 1;
				q.push( (*it) );
			}
	}
}

void read()
{
	int a,b;
	ifstream fin;
	fin.open("bfs.in");
	fin >> N;
	fin >> M;
	fin >> S;

	for(int i=0; i<M ; ++i)
	{
		fin >> a;
		fin >> b;
		L[a].push_back(b);
	}

	fin.close();
}

void printsol()
{
	ofstream fout;
	fout.open("bfs.out");
	for(int i=1;i<=N;++i)
		fout << sol[i]-1 << " ";
	fout.close();
}

int main()
{
	read();
	solve();
	printsol();

	return 0;
}