Cod sursa(job #283423)

Utilizator MirageRobert Sandu Mirage Data 19 martie 2009 09:42:06
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<stdio.h>
#define N 100000
int n,m,s,d[N];
struct nod
{
	int info;
	nod *adr;
};
nod *v[N];
void adauga(nod *&vf,int x){
	nod *q=new nod;
	q->info=x;
	q->adr=vf;
	vf=q;
}

void citire(){
	int x,y;
	scanf("%d%d%d",&n,&m,&s);
	while(m--){
		scanf("%d%d",&x,&y);
		adauga(v[x],y);
	}
}
void adauga_c(nod *&u,int x){
	nod *q=new nod;
	q->info=x;
	q->adr=0;
	u->adr=q;
	u=q;
}
void init(){
	for(int i=1;i<=N;i++)
		d[i]=-1;
}

void bfs(int s){
	int x,y;
	nod*p=new nod,*u,*aux;
	p->info=s;
	p->adr=0;
	u=p;
	d[s]=0;
	while(p){
		x=p->info;
		for(aux=v[x] ; aux ; aux=aux->adr){
			y=aux->info;
			if(d[y]==-1){
				adauga_c(u,y);
				d[y]=1+d[x];
			}
		}
		aux=p;
		p=p->adr;
		delete aux;
	}
}
void scrie(){
	for(int i=1;i<=n;i++)
		printf("%d ",d[i]);
}
int main(){
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	citire();
	init();
	bfs(s);
	scrie();
	return 0;
}