Cod sursa(job #626894)

Utilizator d.andreiDiaconeasa Andrei d.andrei Data 28 octombrie 2011 15:59:43
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <cstdio>

#define file_in "bfs.in"
#define file_out "bfs.out"

#define nmax 100100

typedef struct nod{
	
	int val;
	nod * urm;
} * Qnod;

Qnod G[nmax]; 
int a,b,N,M,S;
int Cost[nmax];
int viz[nmax];
int i,Q[nmax];


void add(Qnod & p,int x){
	
	Qnod c=new nod;
	c->val=x;
	c->urm=p;
	p=c;
}
	
void bfs(int nod){
	int x;
	Qnod c;
	int p=1;
	int u=1;
	Q[p]=nod;
	viz[nod]=1;
	
	
	while(p<=u){
		
		x=Q[p];
		for (c=G[x];c!=NULL;c=c->urm)
			 if (!viz[c->val]){
				 viz[c->val]=1;
				 Q[++u]=c->val;
				 Cost[c->val]=Cost[x]+1;
			 }
		p++;
	}
}	
			
		

int main(){
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d %d", &N, &M, &S);
	while(M--){
		scanf("%d %d", &a, &b);
		
		add(G[a],b);
	}
	
	for (i=1;i<=N;++i)
		 Cost[i]=-1;
	Cost[S]=0;
	
	
	bfs(S);
	
	for (i=1;i<=N;++i)
		 printf("%d ", Cost[i]);
	
	return 0;
	
}