Cod sursa(job #1990897)

Utilizator fylot3Bogdan Filote fylot3 Data 14 iunie 2017 01:47:47
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <list>
#include <vector>
#include <queue>

using namespace std;

class Graph {
	int V;
	list<int> *adj;

	void recursiveDFS(int u);

public:
	Graph(int V);
	void addEdge(int u, int v);
	void breadthFirstSearch(int src);
};

Graph::Graph(int V) {
	this->V = V;
	adj = new list<int>[V];
}

void Graph::addEdge(int u, int v) {
	adj[u].push_back(v);
	// adj[v].push_back(u);
}

void Graph::breadthFirstSearch(int src) {
	ofstream fout("bfs.out");
	vector<bool> visited(V, false);
	vector<int> d(V, 0);

	queue<int> Q;
	Q.push(src);

	while (!Q.empty()) {
		int u = Q.front();
		Q.pop();
		visited.at(u) = true;

		list<int>::iterator i;
		for (i = adj[u].begin(); i != adj[u].end(); i++) {
			if (visited.at(*i) == false) {
				Q.push(*i);
				d.at(*i) = d.at(u) + 1;
			}
		}
	}

	for (int j = 0; j < V; j++) {
		if (d.at(j) == 0 && j != src)
			fout << "-1 ";
		else
			fout << d.at(j) << " ";
	}
	
}

int main(void) {
	int N, M, src;
	ifstream fin("bfs.in");
	
	fin >> N >> M >> src;
	Graph g(N);
	for (int i = 1; i <= M; i++) {
		int u, v;
		fin >> u >> v;
		if (u != v)
			g.addEdge(u - 1, v - 1);
	}

	g.breadthFirstSearch(src - 1);
}