Cod sursa(job #2483038)

Utilizator invoIlioi Alexandru invo Data 29 octombrie 2019 10:43:33
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
#define MAXN 100005					//maximum accepted nodes
#define MAXM 1000005				//maximum accepted edges
using namespace std;

vector<int> neighbours[MAXN];		//lists of neighbours of each node
int m, n, startNode, dist[MAXN];	//m - no of edges, n - no of nodes
queue<int> q;

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

void InitializeDistances()
{
	for (int i = 0; i < n; ++i)
	{
		dist[i] = -1;
	}
	dist[startNode] = 0;
}

void ReadData()
{
	int n1, n2;
	f >> n >> m >> startNode;
	for (int i = 0; i < m; ++i)
	{
		f >> n1 >> n2;
		neighbours[n1 - 1].push_back(n2 - 1);
	}
	startNode = startNode - 1;
}

void FindDistances()
{
	q.push(startNode);
	while (!q.empty())
	{
		int currentNode = q.front();
		q.pop();
		for (int i = 0; i < neighbours[currentNode].size(); ++i)
		{
			if (dist[neighbours[currentNode][i]] == -1)
			{
				q.push(neighbours[currentNode][i]);
				dist[neighbours[currentNode][i]] = dist[currentNode] + 1;
			}
		}
	}
}

void ShowData()
{
	for (int i = 0; i < n; ++i)
	{
		g << dist[i] << ' ';
	}
}

int main()
{
	ReadData();
	InitializeDistances();
	FindDistances();
	ShowData();
}