Cod sursa(job #705870)

Utilizator andrici_cezarAndrici Cezar andrici_cezar Data 5 martie 2012 09:34:27
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>
#include <vector>
#include <queue>
#define maxn 100100
using namespace std;

vector <long> A[maxn];
queue <long> coada;

long C[maxn], G[maxn], nod, i, x, y, N, M, elc;

int main() {
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	
		scanf("%ld %ld %ld", &N, &M, &nod);
		
		for (i = 1; i <= M; ++i) {
			scanf("%ld %ld", &x, &y);
			A[x].push_back(y);
		}
		
		for (i = 1; i <= N; ++i) {
			G[i] = A[i].size();
		}
		
		memset(C, -1, sizeof(C));
		C[nod] = 0;
		coada.push(nod);
		
		for (; !coada.empty(); coada.pop()) {
			elc = coada.front();
			for (i = 0; i < G[elc]; ++i) {
				if (C[ A[elc][i] ] == -1) {
					C[ A[elc][i] ] = C[elc] + 1;
					coada.push(A[elc][i]);
				}
			}
		}
		
		for (i = 1; i <= N; ++i) {
			printf("%ld ", C[i]);
		}
		
		printf("\n");
	
	return 0;
}