Cod sursa(job #361420)

Utilizator dexter_dexMutascu Adrian - Dragos dexter_dex Data 4 noiembrie 2009 23:18:47
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<stdio.h> 
#include<vector>

using namespace std;

#define Nmax 100010

vector <int> A[Nmax];

int i, n, m, s, p, u, x, y;
int Lg[Nmax],Coada[Nmax], Cost[Nmax];

FILE * f = fopen("bfs.in", "r");
FILE * g = fopen("bfs.out", "w");

int main (){
	
	fscanf (f, "%d %d %d", &n, &m, &s);
	for (i = 1 ; i <= m ; i++) {
		fscanf(f, "%d %d", &x, &y);
			A[x].push_back(y);
	}
	
	
	for (i = 1 ; i <= n ; i++)
		Lg[i] = A[i].size();
	
	memset(Cost,-1,sizeof(Cost));
	
	p = 1;
	u = 2;
	Coada[p] = s;
	Cost[s] = 1;
	
	while (p < u){
		
		for (i = 0 ; i <= Lg[Coada[p]]-1 ; i++) 
 			if (Cost[ A[ Coada[p] ][ i ] ] == -1) {	
					Coada[u] = A[Coada[p]][i];
					Cost [ A[Coada[p]][i] ] = Cost[ Coada[p] ] + 1; 
					u++;
			}
		
		p++;
		
	}
	
	for (i = 1 ; i <= n ; i++) 
		if (Cost[i]!=-1) fprintf (g, "%d ", Cost[i] - 1);
		else fprintf (g, "%d ", Cost[i]);
	
	fclose(f);
	fclose(g);
	return 0;
	
}