Cod sursa(job #1459214)

Utilizator glbglGeorgiana bgl glbgl Data 9 iulie 2015 13:22:43
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <stdio.h>
#include <vector>
#include <fstream>
#include <queue>

using namespace std;

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

int N, M, s;
vector < vector<int> > neigh;
vector<int> d;
vector<bool> visited;
queue<int> Q;


void read(){

	in >> N >> M >> s;

	d.resize(N+1);
	visited.resize(N+1);

	for(int i = 0; i <= N; ++i){
		vector<int> v;
		neigh.push_back(v);
	}

	int x, y;
	for(int i = 0; i < M; ++i){
		in >> x >> y;
		neigh[x].push_back(y);
	}
}


void BFS(int source){

	d[source] = 0;
	Q.push(source);
	visited[source] = true;

	while(!Q.empty()){
		int u = Q.front();
		Q.pop();
		for(unsigned int i = 0; i < neigh[u].size(); ++i){
			int v = neigh[u][i];
			if(visited[v] == false){
				d[v] = d[u] + 1;
				Q.push(v);
				visited[v] = true;
			}
		}
	}

}

void write(){

	for(int i = 1; i <= N; ++i){
		if(i != s && d[i] == 0)
			out << -1 << " ";
		else out << d[i] << " ";
	}
}

int main(){

	read();
	BFS(s);
	write();
}