Cod sursa(job #876045)

Utilizator daniel_dumitriudaniel dumitriu daniel_dumitriu Data 11 februarie 2013 10:02:17
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
//============================================================================
// Name        : bfs.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
//http://infoarena.ro/problema/bfs

//Se considera un graf orientat cu N varfuri si M arce

#include <iostream>
#include <fstream>
#include <string>
#include <queue>
#include <vector>
#include <map>
#include <cstdio>
using namespace std;

queue<pair<int,int> > q;
map<int , vector<int> > graf;
int dist[100000] = {-1};
int vizitat[100000]= {0};
void bfs(){
	if(!q.empty()){
		pair<int, int> node = q.front();
		q.pop();
		dist[node.first] = node.second;
		vizitat[node.first] = true;
		for(unsigned int i = 0; i < graf[node.first].size(); ++i){
			if(!vizitat[graf[node.first].at(i)])
				q.push(pair<int,int>(graf[node.first].at(i), node.second +1));
		}
		bfs();
	}
}
int main() {
	cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
	//read from file bfs.in //
	std::fill_n(dist, 100000,-1);
	std::fill_n(vizitat, 100000,0);

	freopen("bfs.in", "r", stdin);
	freopen("bfs.txt", "w", stdout);
	int N,M,s;
	cin >> N >>M >> s;
	for(int i = 0; i < M; ++i){
		int n1, n2;
		cin >> n1 >> n2;
		graf[n1].push_back(n2);
	}
	q.push(pair<int,int>(s,0));
	bfs();
	ofstream outfile("bfs.out");
	for(int i =1; i <= N; ++i)
		cout << dist[i] << " ";
	return 0;
}