Cod sursa(job #632902)

Utilizator JohannesJohannes Dragulanescu Johannes Data 12 noiembrie 2011 15:08:30
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <vector>
#include <stdio.h>

using namespace std;

vector <int> vecinii[100001];
vector <int> coada_bfs;

int sel[ 100001];

void bfs (const int &nod_sursa, const int &numar_noduri) {
	freopen("bfs.out","w",stdout);

	coada_bfs.push_back(nod_sursa);
	sel[nod_sursa] = 1;
	// se pune in coada si se selecteaza nodul sursa

	for (int element_actual = 0; element_actual < coada_bfs.size(); ++element_actual) 
	{
		// se parcurge toata coada
		int nod_actual = coada_bfs[element_actual];
		int nr_vecini = vecinii[nod_actual].size();
		for (int j = 0; j < nr_vecini; ++j)
			// se verifica daca au fost selectati vecinii
			if (sel[vecinii[nod_actual][j]] == 0) 
			{
				coada_bfs.push_back( vecinii[nod_actual][j]);
				sel[ vecinii[nod_actual][j]] = sel[nod_actual] + 1;
				// numarul de muchii care trebuie parcurs pentru a ajunge la nodul muchii[nod_actual][j]
			}
	}
	for (int i = 1; i <= numar_noduri; ++i)
	{
		printf("%d ",sel[i] - 1);
	}
}

int main() {

	freopen("bfs.in","r",stdin);
	
	int numar_noduri, numar_muchii, nod_sursa;	
	scanf("%d %d %d ",&numar_noduri,&numar_muchii,&nod_sursa);
	for (int i = 1; i <= numar_muchii; ++i) 
	{
		int sursa, destinatie;
		scanf("%d%d",&sursa,&destinatie);
		vecinii[sursa].push_back(destinatie);
		// se retin in acest vector vecinii nodului sursa
	}
	
	bfs (nod_sursa, numar_noduri);

	return 0;
}