Cod sursa(job #343014)

Utilizator aghamatMorariu Razvan aghamat Data 24 august 2009 17:05:02
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <stdio.h>
#define  DIM 100000005

struct Nod{
	int x;
	Nod *adr;
	};
Nod *Lst[DIM];
int coada[DIM/10], vizitat[DIM/10], cost[DIM/10];
int i,j,n,m,pi,ps,s,x,y;

void add(int a, int b)
	{
		Nod *p;
		p=new Nod;
		p->x=b;
		p->adr=Lst[a];
		Lst[a]=p;
	}

void bf()
	{
		Nod *p;
		vizitat[s]=1;
		pi=ps=1;
        coada[pi]=s;
		while (pi<=ps)
			{
			p=Lst[coada[pi]];
			while(p)
				{
				if (!vizitat[p->x])
					{
					vizitat[p->x]=1;
					coada[++ps]=p->x;
					cost[p->x]=cost[coada[pi]]+1;
					}
				p=p->adr;
				}
			pi++;
			}
	}

int main()
	{
		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);
			add(x, y);
			}
		bf();
		for (i=1; i<=n; ++i)
			if (cost[i])
				printf("%d ",cost[i]);
				else
					if (i==s)
						printf("0 ");
					else printf("-1 ");

	return 0;
	}