Cod sursa(job #960256)

Utilizator gabrieligabrieli gabrieli Data 10 iunie 2013 03:30:01
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;

vector	<int> bfs (const vector <vector <int>> &G, int start)
{
	int n = G.size()-1;
	queue <int> Q;
	vector <int> D (n+1, -1);

	Q.push (start);
	D[start] = 0;

	while (!Q.empty())
	{
		int v = Q.front();
		Q.pop();

		for (auto &u : G[v])
			if (D[u] == -1)
			{
				D[u] = D[v] + 1;
				Q.push (u);
			}
	}

	return D;
}

int main()
{
	ifstream fin ("bfs.in");
	ofstream fout ("bfs.out");

	int n, m, s;
	fin >> n >> m >> s;

	vector <vector <int>> G(n+1, vector <int> ());
	
	for (; m; --m)
	{
		int x, y;
		fin >> x >> y;
		G[x].push_back(y);
	}

	vector <int> D = bfs (G, s);

	for (int i = 1; i <= n; ++i)
		fout << D[i] << ' ';
	fout << endl;

	fout.close();
	return EXIT_SUCCESS;
}