Cod sursa(job #767602)

Utilizator ioana26Ioana Andronescu ioana26 Data 13 iulie 2012 23:46:41
Problema BFS - Parcurgere in latime Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
/*
Parcurgerea in latime intr-un graf.
*/

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

#define MAXN	100000

using namespace std;

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

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

	dist[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 (dist[v] > dist[u] + 1) {
				dist[v] = dist[u] + 1;
				coada.push(v);
			} 
		}
	}
}

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 && i != sursa)
			printf("-1 ");
		else
			printf("%d ", dist[i]);

	return 0;
}