Cod sursa(job #768810)

Utilizator ioana26Ioana Andronescu ioana26 Data 17 iulie 2012 18:41:52
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
/*
Parcurgerea in latime intr-un graf.
*/

#include <iostream>
#include <vector>
#include <queue>
#include <stdio.h>
#include <limits.h>
#include <stdbool.h>

#define MAXN	100000

using namespace std;

int nr_noduri, nr_muchii, sursa;
int dist[MAXN];
bool vizitat[MAXN];
vector<int> noduri[MAXN];
queue<int> coada;

void bfs () {
	int i;
	for (i = 1; i <= nr_noduri; i++) {
		dist[i] = INT_MAX;
		vizitat[i] = 0;
	}

	dist[sursa] = 0;
	vizitat[sursa] = 0;
	coada.push(sursa);
	while (!coada.empty()) {
		int u = coada.front();
		coada.pop();
		for (i = 0; i < noduri[u].size(); i++) {
			int v = noduri[u][i];
			if ((!vizitat[i]) && (dist[v] > dist[u] + 1)) {
				dist[v] = dist[u] + 1;
				coada.push(v);
				vizitat[v] = 1;
			} 
		}
	}
}

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

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

	bfs();

	for (i = 1; i <= nr_noduri; i++)
		if (dist[i] == INT_MAX)
			printf("-1 ");
		else
			printf("%d ", dist[i]);

	return 0;
}