Cod sursa(job #282011)

Utilizator andreea_mandreea martinovici andreea_m Data 16 martie 2009 19:01:42
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 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);
		//adauga(v[y],x);
	}
}

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;
}