Cod sursa(job #464925)

Utilizator alisssiaMititelu Andra alisssia Data 22 iunie 2010 16:30:24
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
using namespace std;
#include<cstdio>
#define nmax 100001
struct nod { int v; nod* next;};
nod *a[nmax];
int n,m,s,use[nmax],t[nmax],Q[nmax];

void add(int i, int j)
{
	nod* p=new nod;
	p->v=j;
	p->next=a[i];
	a[i]=p;
}

void bfs(int k)
{
	int nr=0,p=1,q=1;
	Q[p]=k;
	use[k]=1;
	while(p<=q)
	{
		nr++; 
		for(nod *u=a[Q[p]];u;u=u->next)
			if(!use[u->v]) 
			{
				t[u->v]=nr;
				use[u->v]=1;
				Q[++q]=u->v;
			}
		p++;	
	}
}
	

int main()
{
	int i,x,y;
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	scanf("%d%d%d",&n,&m,&s);
	for(i=1;i<=m;i++)
	{
		scanf("%d%d",&x,&y);
		 if(x!=y) add(x,y);
	}

	bfs(s);
	for(i=1;i<=n;i++)
		if(t[i]) printf("%d ",t[i]);
		else if(s!=i) printf("-1 ");
			else printf("0 ");
	printf("\n");
	return 0;
}