Cod sursa(job #683013)

Utilizator chirila_aronChirila Aronel chirila_aron Data 19 februarie 2012 20:48:06
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include<cstdio>
using namespace std;
int a[2][1000],n,m,s,st[1000],viz[1000];
void citire()
{
	int x,y,i;
	freopen("bfs.in","r",stdin);
	scanf("%d%d%d", &n,&m,&s); 
	for(i=1;i<=m;i++)
	{
		scanf("%d%d",&x,&y); 
		a[0][i]=y;
		a[1][i]=st[x];
		st[x]=i;
	}
}
void bfs(int s)
{
	int p,u,c[1000],v,k;
	k=1;
	p=u=1;
	c[p]=s;
	viz[s]=k;
	while(p<=u)
	{
		v=st[c[p]];
		p++;
		while(v)
		{
			if(viz[a[0][v]]==0)
			{
				u++;
				c[u]=a[0][v];
				viz[a[0][v]]=k;
			}
			v=a[1][v];
		}
		k++;
	}
	viz[s]=0;
}
void afisare()
{
	int i;
	freopen("bfs.out","w",stdout); 
	for(i=1;i<=n;i++)
	{
		printf("%d ", !viz[i] && i!=s ? -1 : viz[i] );
	}

}
int main()
{
	citire();
	bfs(s);
	afisare();
	return 0;
}