Cod sursa(job #2246364)

Utilizator test_accNo Name test_acc Data 26 septembrie 2018 23:43:59
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <vector>
#include <queue>

#define NMAX 100001
#define INF 10000000

using namespace std;

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

class Graph {
private:
	vector<int> m_G[NMAX];
	int m_edges;
	int m_nodes;
	int source;

public:
	Graph() {
		f >> m_nodes >> m_edges >> source;

		for (int i = 1; i <= m_edges; i++) {
			int source, dest;
			f >> source >> dest;
			m_G[source].push_back(dest);
		}
	}

	void BFS_Traversal() {
		queue<int> Q;
		int dist[NMAX];
		for (int i = 1; i <= m_nodes; i++) {
			dist[i] = INF;
		}
		bool mark[NMAX] = {0};

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

		while (!Q.empty()) {
			int crt_node = Q.front();
			Q.pop();

			for (const auto neighbour : m_G[crt_node]) {
				if (!mark[neighbour]) {
					dist[neighbour] = dist[crt_node] + 1;
					mark[neighbour] = true;
					Q.push(neighbour);
				}
			}
		}

		for (int i = 1; i <= m_nodes; i++) {
			if (dist[i] == INF) {
				g << -1 << ' ';
			}
			else {
				g << dist[i] << ' ';
			}
		}
	}
};

int main() {
	Graph *my_graph = new Graph();
	my_graph->BFS_Traversal();
}