Cod sursa(job #1544603)

Utilizator ionutmodoModoranu Ionut-Vlad ionutmodo Data 6 decembrie 2015 13:35:08
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
/*
	http://www.infoarena.ro/problema/bfs
*/

#include <fstream>
#include <queue>
#include <vector>
using namespace std;

int N, M, S, dist[100001];
vector<int> L[100001];
bool viz[100001];

void read()
{
	int i, x, y;
	ifstream fin("bfs.in");
	fin >> N >> M >> S;
	for (i = 0; i < M; ++i)
	{
		fin >> x >> y;
		L[x].push_back(y);
	}
	fin.close();
}

void setupDistArray()
{
	for (int i = 1; i <= N; ++i)
		dist[i] = -1;
}

void BFS(int start)
{
	setupDistArray();
	queue<int> queue;
	queue.push(start);
	viz[start] = true;
	dist[start] = 0;
	while (!queue.empty())
	{
		int node = queue.front();
		queue.pop();
		vector<int>::iterator it;
		for (it = L[node].begin(); it != L[node].end(); ++it)
		{
			if (!viz[*it])
			{
				viz[*it] = true;
				dist[*it] = dist[node] + 1;
				queue.push(*it);
			}
		}
	}
}

void write()
{
	ofstream fout("bfs.out");
	for (int i = 1; i <= N; ++i)
		fout << dist[i] << " ";
	fout << "\n";
	fout.close();
}

int main()
{
	read();
	BFS(S);
	write();
	return 0;
}