Cod sursa(job #1206417)

Utilizator pulseOvidiu Giorgi pulse Data 9 iulie 2014 21:41:55
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <vector>
#include <queue>
#define INF 0x3f3f3f3f

using namespace std;

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

int n, m, first, cost[100005];
vector <int> G[1000005];

void BFS()
{
	queue <int> Q;
	for (int i = 1; i <= n; ++i)
		cost[i] = INF;
	cost[first] = 0;
	Q.push(first);
	while (!Q.empty())
	{
		int node = Q.front();
		Q.pop();
		for (vector <int> :: iterator it = G[node].begin(); it != G[node].end(); ++it)
		{
			if (cost[*it] > cost[node] + 1)
			{
				cost[*it] = cost[node] + 1;
				Q.push(*it);
			}
		}
	}
}

int main()
{
	fin >> n >> m >> first;
	for (int i = 1; i <= m; ++i)
	{
		int a, b;
		fin >> a >> b;
		G[a].push_back(b);
	}
	BFS();
	for (int i = 1; i <= n; ++i)
	{
		if (cost[i] != INF)
			fout << cost[i] << " ";
		else
			fout << "-1 ";
	}
	fin.close();
	fout.close();
	return 0;
}