Cod sursa(job #2653341)

Utilizator raikadoCri Lu raikado Data 27 septembrie 2020 18:58:31
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <iostream>
#include <cassert>
#include <vector>
#include <queue>
#include <utility>

using namespace std;

vector<int> bfs(vector<vector<uint>> &graph, uint source)
{
	size_t N = graph.size();
	vector<int> dist(N, -1);
	queue<uint> Q;

	dist[source] = 0;
	Q.push(source);

	while (!Q.empty())
	{
		uint node = Q.front();
		Q.pop();

		for (uint neigh : graph[node])
		{
			if (dist[neigh] == -1)
			{
				Q.push(neigh);
				dist[neigh] = dist[node] + 1;
			}
		}
	}

	return dist;
}

int main(int argc, char const *argv[])
{
	ifstream fin("bfs.in");
	ofstream fout("bfs.out");
	assert(fin.is_open());

	uint N, M, S;
	fin >> N >> M >> S;

	vector<vector<uint>> graph(N);
	for (size_t i = 0; i < M; i++)
	{
		uint x, y;
		fin >> x >> y;
		graph[x-1].push_back(y-1);
	}

	vector<int> dist = bfs(graph, S-1);
	for (auto d : dist)
	{		
		fout << d << ' ';
	}
	
	return 0;
}