Cod sursa(job #634810)

Utilizator Tucu94Andrei Tuculanu Tucu94 Data 17 noiembrie 2011 12:23:40
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>
#include <vector>
#define Nmax 100050

using namespace std;

int C[Nmax], D[Nmax], L[Nmax], viz[Nmax], n, m, nod, x, y, i, p, u, v;
vector <int> A[Nmax];

int main() {
	
	FILE *f = fopen("bfs.in", "r");
	FILE *g = fopen("bfs.out", "w");
	
	fscanf(f, "%d %d %d", &n, &m, &nod);
	for (i = 1; i <= m; i++) {
		fscanf(f, "%d %d", &x, &y);
		A[x].push_back(y);
	}
	
	for (i = 1; i <= n; i++)
		L[i] = A[i].size();
	
	
	
	C[1] = nod, D[nod] = -2, viz[nod] = 1;
	for (p = u = 1; p <= u; p++)
		for (i = 0; i < L[C[p]]; i++) {
			v = A[C[p]][i];
			if (!viz[v]) {
				viz[v] = 1;
				C[++u] = v, D[v] = D[C[p]] + 1;
			}
		}
	
	for (i = 1; i <= n; i++){
		if(D[i]==0)
			fprintf(g, "-1");
		
		if(D[i]==-2)
			fprintf(g, "0");
		if(D[i]>0)
			fprintf(g, "%d ", D[i]);
		}
	fclose(f); fclose(g);
	
	return 0;
}