Cod sursa(job #2191044)

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

#define MAX_NODES 100000

using namespace std;

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

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

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 = 1; i <= nodes; i++)
		distances[i - 1] = 0x7FFFFFFF;
	distances[sourceNode-1] = 0;

	queue<int> q;

	q.push(sourceNode);

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

		for (auto node : v[crtNode])
		{
			if (distances[node - 1] > distances[crtNode - 1] + 1)
			{
				distances[node - 1] = distances[crtNode - 1] + 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 - 1] == 0x7FFFFFFF)
			g << "-1 ";
		else
			g << distances[i - 1] << " ";
	}
	
	
	
	return 0;
}