Cod sursa(job #288562)

Utilizator lamez0rBogdan Bondor lamez0r Data 25 martie 2009 22:04:57
Problema BFS - Parcurgere in latime Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1 kb
#include<stdio.h>
int n,m,s,vizitat[100001];

struct graf 
{
	int inf;
	graf *leg;
} *l[100001];

void add (int x, int y)
{
	graf *p;
	p=new graf;
	p->inf=y;
	p->leg=l[x];
	l[x]=p;
}

void read ()
{
	int i,x,y;
	FILE *f=fopen("bfs.in","r");
	fscanf(f,"%d%d%d",&n,&m,&s);
	for (i=1;i<=m;++i)
	{
		fscanf(f,"%d%d",&x,&y);
		add(x,y);
	}
	fclose(f);
}

int exista (int x, int y)
{
	graf *p;
	p=l[x];
	while (p!=NULL)
	{
		if (p->inf == y)
			return 1;
		p=p->leg;
	}
	return 0;
}

void bfs (int vf)
{
	int i,c[100001],inc,sf;
	inc=sf=1;
	c[1]=vf;
	while (inc<=sf)
	{
		for (i=1;i<=n;++i)
			if ( !vizitat[i] && exista(c[inc],i) && i!=vf )
			{
				vizitat[i]=vizitat[c[inc]]+1;
				c[++sf]=i;
			}
		++inc;
	}
}

void write ()
{
	FILE *f=fopen("bfs.out","w");
	int i;
	for (i=1;i<=n;++i)
		if(vizitat[i] || i==s)
			fprintf(f,"%d ",vizitat[i]);
		else
			fprintf(f,"-1 ");
	fclose(f);
}

int main ()
{
	read ();
	bfs (s);
	write ();
	return 0;
}