Cod sursa(job #228776)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 7 decembrie 2008 23:02:16
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>

int N, M, S, dist[100005], c[100005];

typedef struct nod
{
	int x;
	nod *a;
} *pNod;
pNod v[100005];

void citire()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);

	int i, x, y;
	scanf("%d %d %d",&N,&M,&S);
	for (i = 1; i <= M; i++)
	{
		scanf("%d %d",&x,&y);
		if (x != y)
		{
			pNod q = new nod;
			q -> x = y;
			q -> a = v[x];
			v[x] = q;
		}
	}
	for (i = 1; i <= N; i++) dist[i] = -1;
	dist[S] = 0;
}

void bfs()
{
	int p, u, poz;
	pNod q;
	p = u = 0;
	c[0] = S;
	while (p <= u)
	{
		poz = p % 100000;
		for (q = v[c[poz]]; q != NULL; q = q -> a)
			if (dist[q -> x] == -1 || dist[q -> x] > dist[c[poz]] + 1)
			{
				u++;
				c[u % 100000] = q -> x;
				dist[q -> x] = dist[c[poz]] + 1;
			}
		p++;
	}
}


int main()
{
	citire();
	bfs();
	for (int i = 1; i <= N; i++) printf("%d ",dist[i]);
	return 0;
}