Cod sursa(job #2262906)

Utilizator FilpTeodorFilp Teodor FilpTeodor Data 17 octombrie 2018 22:04:41
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>

using namespace std;

struct Node{
	int routeLength;
	int thisNode;
};

class Graph{
	private:
		int V;
		vector<int>* adj;

	public:
		Graph(int V);
		void addEdge(int v, int w);
		int BFS(int s, int end);

};


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

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

int Graph::BFS(int s, int end){

	bool *visited = new bool[V];

	for(int i=0; i<V; i++)
		visited[i] = false;

	queue<Node> Q;

	Node sourceNode;
	sourceNode.thisNode = s;
	sourceNode.routeLength = 0;

	visited[s] = true;

	Q.push(sourceNode);

	while(!Q.empty()){

		sourceNode = Q.front();
		Q.pop();

		if(sourceNode.thisNode == end)
			return sourceNode.routeLength;

		vector<int>::iterator it = adj[sourceNode.thisNode].begin();

		for(; it!=adj[sourceNode.thisNode].end(); ++it){
			if(!visited[*it]){

				visited[*it] = true;

				Node newNode;
				newNode.thisNode = *it;
				newNode.routeLength = sourceNode.routeLength + 1;

				Q.push(newNode);

			}
		}
	}

	return -1;
	
}

int main(){


	ifstream read("bfs.in");
	ofstream write("bfs.out");
	int verticesNumber, edgeNumber, sourceNode;

	cin>>verticesNumber>>edgeNumber>>sourceNode;
	

	Graph g(verticesNumber);

	for(int i=0; i<edgeNumber; i++)
	{
		int x, y;
		cin>>x>>y;
		x--;
		y--;
		if(x!=y)
			g.addEdge(x, y);
	}

	for(int i=0; i<verticesNumber; i++)
		cout<<g.BFS(sourceNode-1, i)<<" ";
	
	return 0;
}