Cod sursa(job #1045014)

Utilizator rvnzphrvnzph rvnzph Data 30 noiembrie 2013 19:15:42
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <stdio.h>

using namespace std;

const int NLen=100001;
const int MLen=1000001;

int Dest[NLen];
int use[NLen];
int q[MLen];

struct graf
{
	int node;
	graf *link;

	graf(int node,graf *link)
	{
		this->node=node;
		this->link=link;
	}
}*g[NLen];

void addTo(graf *&g,int node)
{
	graf *p=new graf(node,g);
	g=p;
}

void bfs(int node)
{
	use[node]=1;
	Dest[node]=0;

	int start,end;
	start=end=1;
	q[start]=node;

	while(start<=end)
	{
		node=q[start++];
		
		for(graf *p=g[node];p;p=p->link)
			if(!use[p->node])
			{
				use[p->node]=1;
				q[++end]=p->node;
				Dest[p->node]=Dest[node]+1;
			}
	}
}

int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);

	int N,M,S;
	scanf("%d%d%d",&N,&M,&S);

	while(M--)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		addTo(g[x],y);
	}

	//initialization
	for(int i=1;i<=N;++i)
	{
		Dest[i]=-1;
		use[i]=0;
	}

	bfs(S);

	for(int i=1;i<=N;++i)
		printf("%d ",Dest[i]);
	printf("\n");

	return 0;
}