Cod sursa(job #1154307)

Utilizator roxana.istratePoenaru Roxana roxana.istrate Data 26 martie 2014 09:02:37
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <queue>

using namespace std;

int main(){
	
	ifstream fin("bfs.in");
	ofstream fout("bfs.out");

	int n, m, a, b, s, count = 0;
	queue<int> q;
	vector<vector<int>> adiacenta;
	vector<int> isInQueue;
	vector<int> dist;

	fin >> n >> m >> s;

	/* initialisation  */
	vector<int> v;
	for(int i = 0; i < n; i++){
		adiacenta.push_back(v);
		isInQueue.push_back(false);
		dist.push_back(-1);
	}

	for(int i = 0; i < m; i++){
		fin >> a >> b;
		adiacenta[--a].push_back(--b);
	}

	/* perform BFS starting from "S" node */
	q.push(--s);
	isInQueue[s] = true;
	dist[s] = 0;

	while(q.size()){
		int x = q.front();
		q.pop();
		/* push every child */
		for(int i = 0; i < adiacenta[x].size(); i++){
			int elem = adiacenta[x].at(i);
			if(!isInQueue[elem]){
				isInQueue[elem] = true;
				q.push(elem);
				dist[elem] = dist[x] + 1;
			}
		}
	}

	for(int i = 0; i < n; i++){
		fout << dist[i] <<" ";
 	}
	fout<<"\n";
}