Cod sursa(job #272757)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 7 martie 2009 19:23:37
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<iostream>
#include<stdio.h>
FILE *f=fopen("bfs.in","r"),*g=fopen("bfs.out","w");
struct nod{int inf;nod *next;};
nod *v[100002],*inc,*sfc,*c,*aux;
int n,m,s,i,x,y,l[100005];
void add_n(nod *&v,int y)
{
	nod *c=new nod;
	c->next=v;
	c->inf=y;
	v=c;
}
void add_c(nod *&inc,nod *&sfc,int x)
{
	nod *c;
	if(!inc)
	{
		inc=new nod;
		inc->next=0;
		inc->inf=x;
		sfc=inc;
	}
	else
	{
		c=new nod;
		sfc->next=c;
		c->next=0;
		c->inf=x;
		sfc=c;
	}
}
int main()
{
	fscanf(f,"%d%d%d",&n,&m,&s);
	for(i=1;i<=m;i++)
	{
		fscanf(f,"%d%d",&x,&y);
		add_n(v[x],y);
	}
	memset(l,-1,sizeof(l));
	add_c(inc,sfc,s);
	l[s]=0;
	while(inc)
	{
		for(c=v[inc->inf];c;c=c->next)
		{
			if(l[c->inf]<0)
			{
				add_c(inc,sfc,c->inf);
				l[c->inf]=l[inc->inf]+1;
			}
		}
		aux=inc;
		inc=inc->next;
		delete aux;
	}
	for(i=1;i<=n;i++)
		fprintf(g,"%d ",l[i]);
	return 0;
}