Cod sursa(job #277860)

Utilizator cotofanaCotofana Cristian cotofana Data 11 martie 2009 22:41:09
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <stdio.h>
#define dim 100010

struct nod
{
	int nr;
	nod *urm;
};
int n, m, s, fol[dim];
nod *prim[dim];

void add(nod *&p, int nr)
{
	nod *n1=new nod;
	n1->nr=nr;
	n1->urm=p;
	p=n1;
}

void bfs(int s)
{
	int i, st, dr, v[dim];
	nod *cur;
	for (i=1; i<=n; i++) fol[i]=-1;
	fol[s]=0;
	v[0]=s;
	st=dr=0;
	while (st<=dr)
	{
		cur=prim[v[st]];
		while (cur)
		{
			if (fol[cur->nr]==-1)
			{
				v[++dr]=cur->nr;
				fol[cur->nr]=fol[v[st]]+1;
			}
			cur=cur->urm;
		}
                st++;
	}
}

void del()
{
	int i;
	nod *p;
	for (i=1; i<=n; i++)
	{
		while (prim[i])
		{
			p=prim[i];
			prim[i]=prim[i]->urm;
			delete p;
		}
	}
}

int main()
{
	int i, a, b;
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);
	scanf("%d %d %d\n", &n, &m, &s);
	for (i=1; i<=m; i++)
	{
		scanf("%d %d\n", &a, &b);
		if (a!=b) add(prim[a], b);
	}
	bfs(s);
	for (i=1; i<=n; i++) printf("%d ", fol[i]);
	del();
	return 0;
}