Cod sursa(job #228778)

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

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

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

int find(int x, int y)
{
	pNod q;
	for (q = v[x]; q != NULL; q = q -> a) if (q -> x == y) return 1;
	return 0;
}


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 (!find(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; viz[S] = 1;
	while (p <= u)
	{
		poz = p % 100000;
		for (q = v[c[poz]]; q != NULL; q = q -> a)
			if (!viz[q -> x])
			{
				u++;
				c[u % 100000] = q -> x;
				dist[q -> x] = dist[c[poz]] + 1;
				viz[q -> x] = 1;
			}
		p++;
	}
}


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