Cod sursa(job #272367)

Utilizator katakunaCazacu Alexandru katakuna Data 6 martie 2009 22:10:21
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<stdio.h>

struct nod {int inf; nod *urm;} *v[100111];
int lg[100111],c[100111],n,m,i,x,u,y,rad;

void bfs(){
	
	nod *q;
	int p = u = 1;
	c[p] = rad;
	lg[rad] = 0;
	
	
	while(p <= u){
		
		for(q = v[c[p]]; q!=NULL; q = q->urm){
			if( lg[ q->inf ] == -1 ){
				lg[ q->inf ] = lg[ c[p] ] + 1; 
				u++;
				c[u] = q->inf;
			}			
		}		
		p++;
	}
}


void add(int x, int y){
	nod *p = new nod;
	p->inf = y;
	p->urm = v[x];
	v[x] = p;
}


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

	fscanf(f,"%d %d %d",&n,&m,&rad);
	for(i=1; i<=m; i++){
		fscanf(f,"%d %d",&x,&y);
		add(x,y);
	}

	for(i=1; i<=n; i++)
		lg[i] = -1;
	
	bfs();
	for(i=1; i<=n; i++)
		fprintf(g,"%d ",lg[i]);
	
	fclose(f);
	fclose(g);
	
	return 0;
}