Cod sursa(job #1704877)

Utilizator perjulucianPerju Lucian Ionut perjulucian Data 19 mai 2016 15:27:18
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
using namespace std; 

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

int N, M, S;
vector<vector<int>> edges;
vector<int> distances;

void read(){
	int from,to;
	
	f >> N >> M >> S;
	
	for(int i = 0 ; i <= N ; ++i){
		edges.push_back(vector<int>());
		distances.push_back(-1);
	}

	for(int i = 0 ; i < M ; ++i){
		f >> from >> to;
		edges.at(from).push_back(to);
		
	}
}

void bfs(){
	queue<pair<int,int>> queue;
	queue.push(make_pair(S,0));
	int nod, dist;

	while(queue.size() != 0){
		nod = queue.front().first;
		dist = queue.front().second;
		queue.pop();
		distances[nod] = dist;
		for(auto iter : edges.at(nod)){

			if(distances[iter] == -1){
				queue.push(make_pair(iter,dist + 1));
			}

		}

	}
	 

}

void printData(){
	for(int i = 1 ; i <= N ; ++ i){
		g << distances[i] << " ";
	}
}

int main(){
	read();
	bfs();
	printData();
	return 0;
}