Cod sursa(job #2226695)

Utilizator nionutWHNicula Ionut nionutWH Data 30 iulie 2018 15:07:43
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <iostream>
#include <vector>
#include <queue>
#include <list>

void BFS(const std::vector<std::vector<int>>& adj, std::vector<int>& distances, int source)
{
	std::queue<int> q;
	q.push(source);

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

		for(auto v : adj[u - 1])
		{
			if(distances[v - 1] == -1)
			{
				q.push(v);
				distances[v - 1] = distances[u - 1] + 1;
			}
		}
	}

}

int main()
{
	int N, M, S;
	std::cin >> N >> M >> S;

	std::vector<std::vector<int>> adj(N);
	std::vector<int> distances(N, -1);
	distances[S - 1] = 0;

	int u, v;
	for(int i = 0; i < M; i++)
	{
		std::cin >> u >> v;
		adj[u - 1].push_back(v);
	}

	BFS(adj, distances, S);

	for(auto d : distances)
	{
		std::cout << d << " ";
	}
	std::cout << "\n";

	return 0;
}