Cod sursa(job #1704895)

Utilizator perjulucianPerju Lucian Ionut perjulucian Data 19 mai 2016 15:47:46
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 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>> Q;
	Q.push(make_pair(S,0));
	int nod, dist;

	while(Q.size() > 0){
		nod = Q.front().first;
		dist = Q.front().second;
		Q.pop();
		if(distances[nod] != -1){
			continue;
		}
		distances[nod] = dist;
		int newDist = dist + 1;
		for(auto iter : edges.at(nod)){

			if(distances[iter] == -1){
				Q.push(make_pair(iter,newDist));
			}
		}
	} 

}

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

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