Cod sursa(job #1129581)

Utilizator axnsanCristi Vijdea axnsan Data 27 februarie 2014 23:32:30
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#ifdef __INFOARENA_PROJ
#include "infoarena.h"
#endif

#include <fstream>
#include <vector>
#include <queue>

#ifdef __INFOARENA_PROJ
namespace bfs {
#endif

unsigned const int maxN = 100000;

std::vector<unsigned> G[maxN + 1];
int D[maxN + 1];
bool viz[maxN + 1];

int main()
{
	std::ifstream in("bfs.in");
	std::ofstream out("bfs.out");
	unsigned N, M, S;
	in >> N >> M >> S;
	for (unsigned i = 1; i <= M; ++i)
	{
		unsigned x, y;
		in >> x >> y;
		G[x].push_back(y);
	}
	for (unsigned i = 1; i <= N; ++i)
		D[i] = -1;
	D[S] = 0;
	viz[S] = true;


	std::queue<unsigned> q;
	q.push(S);
	while (!q.empty())
	{
		unsigned nod = q.front();
		for (unsigned v : G[nod])
			if (!viz[v] && D[v] == -1)
				D[v] = D[nod] + 1, q.push(v);
		viz[nod] = true;
		q.pop();
	}
	for (unsigned i = 1; i <= N; ++i)
		out << D[i] << ' ';
	out << '\n';

	return 0;
}

#ifdef __INFOARENA_PROJ
}
#endif