Cod sursa(job #391985)

Utilizator SheepBOYFelix Liviu SheepBOY Data 6 februarie 2010 16:43:45
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<stdio.h>
#include<stdlib.h>
int deg[100005],*vec[100005],q[1000005];
void BFS(int st)
{
	int u,p,j;
	u=0;
	p=1;
	deg[st]=0;
	q[0]=st;
	while(u<p)
	{
		for(j=1;j<vec[q[u]][0];++j)
		{
			if(!deg[vec[q[u]][j]]&&vec[q[u]][j]!=st)
			{
				
				q[p]=vec[q[u]][j];
				deg[q[p++]]=deg[q[u]]+1;
			}
		}
		++u;
	}
}
int main()
{	
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	int n,m,s,ax1,ax2,i;
	scanf("%d%d%d",&n,&m,&s);
	for(i=0;i<m;++i)
	{
		scanf("%d%d",&ax1,&ax2);
		if(ax1!=ax2)
		++deg[ax1];
	}
	freopen("bfs.in","r",stdin);
	scanf("%d%d%d",&n,&m,&s);
	for(i=1;i<=m;++i)
	{
		scanf("%d%d",&ax1,&ax2);
		if(deg[ax1]>0)
		{
			//vec[ax1]=new int[deg[ax1]+1];
			vec[ax1]=(int *)malloc((deg[ax1]+1)*sizeof(int));
			vec[ax1][0]=1;
			vec[ax1][vec[ax1][0]++]=ax2;
			deg[ax1]=0;
		}
		else
			if(ax1!=ax2)
				vec[ax1][vec[ax1][0]++]=ax2;
	}
	BFS(s);
	for(i=1;i<=n;++i)
		if(deg[i]||(!deg[i]&&i==s))
			printf("%d ",deg[i]);
		else
			printf("-1 ");
	return 0;
}