Cod sursa(job #2191049)

Utilizator MihaiAntonMihai Anton MihaiAnton Data 1 aprilie 2018 14:38:58
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <vector>
#include <queue>

#define MAX_NODES 100001

using namespace std;

ifstream f("bfs.in");
ofstream g("bfs.out");

vector<int> v[MAX_NODES];
int distances[MAX_NODES];
queue<int> q;

void input(int edges)
{
	//reads the graph data
	for (int i = 1; i <= edges; i++)
	{
		int a, b;
		f >> a >> b;
		v[a].push_back(b);
	}
}

void bfs(int nodes, int sourceNode)
{
	for (int i = 0; i <= nodes; i++)
		distances[i] = 0x7FFFFFFF;
	distances[sourceNode] = 0;

	

	q.push(sourceNode);
	int crtNode;
	while (!q.empty())
	{
		crtNode = q.front();
		q.pop();

		for (auto node : v[crtNode])
			if (distances[node] > distances[crtNode] + 1)
			{
				distances[node] = distances[crtNode] + 1;
				q.push(node);
			}
	}
}

int main()
{
	
	
	
	int nodes, edges, sourceNode;
	f >> nodes >> edges >> sourceNode;

	input(edges);
	

	bfs(nodes, sourceNode);

	for (int i = 1; i <= nodes; i++)
	{
		if (distances[i] == 0x7FFFFFFF)
			g << "-1 ";
		else
			g << distances[i] << " ";
	}
	
	
	
	return 0;
}