Cod sursa(job #1200420)

Utilizator gabriel.badeaGabriel Badea gabriel.badea Data 22 iunie 2014 14:33:35
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include<stdio.h>
#include<vector>
#include<iostream>
#include<queue>
using namespace std;

#define NMAX 100005

vector<int> nodes[NMAX];			// nodurile din graf, e.g. nodes[i] contine vecinii lui i
vector<bool> viz(NMAX);				// vector pt a verifica daca e vizitat sau nu
vector<int> costuri(NMAX);			// vector pt costuri
int nr_noduri, nr_arce, nod_sursa, x, y;
queue<int> coada_cu_noduri;

void bfs(int nod)
{
	viz[nod] = true;

	for(int i = 0; i < nodes[nod].size(); ++i)
	{
		if(!viz[nodes[nod][i]])
		{
			coada_cu_noduri.push(nodes[nod][i]);		// daca nu a fost vizitat il adaugam in coada
			costuri[nodes[nod][i]] = costuri[nod]+1;	
		}
	}

	coada_cu_noduri.pop();

	if(!coada_cu_noduri.empty())
		bfs(coada_cu_noduri.front());
}

int main()
{
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);

	cin >> nr_noduri >> nr_arce >> nod_sursa;

	for(int i = 0; i < nr_arce; ++i)
	{
		scanf("%d%d", &x, &y);
		nodes[x].push_back(y);
	}

	coada_cu_noduri.push(nod_sursa);	// adaugam nodul initial in sursa


	bfs(nod_sursa);

	/*
	for(int i = 0; i < nr_noduri; ++i)
	{
		if(!viz[i])
			bfs(i);
	}
	*/

	int minus_unu = -1;

	for(int i = 1; i <= nr_noduri; ++i)
	{
		if(viz[i])
			printf("%d ", costuri[i]);
		// nu se poate ajunge, cost -1
		else
			printf("%d ", minus_unu);
	}

	return 0;
}