Cod sursa(job #256104)

Utilizator MarquiseMarquise Marquise Data 11 februarie 2009 08:16:42
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>
#include <string.h>

#define NMAX 100010

int N, M, S, v[NMAX], q[NMAX];

struct nod
{
	int info;
	nod *next;
};

nod *p[NMAX];


void bfs()
{
	int st, dr;
	nod *r;

	memset(v, -1, sizeof(v));

	st = dr = 1;
	q[1] = S;
	v[S] = 0;

	while ( st <= dr)
	{
		for ( r = p[q[st]]; r; r = r -> next)
			if ( v[r -> info] == -1)
			{
				dr++;
				q[dr] = r -> info;
				v[r -> info] = v[ q[st] ] + 1;
			}

		++st;
	}
}


int main()
{
	int i, x, y;
	nod *r;

	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);

		r = new nod;
		r -> info = y;
		r -> next = p[x];
		p[x] = r;
	}

	bfs();

	for ( i = 1; i <= N; i++)
		printf("%d ", v[i]);

	printf("\n");

	return 0;
}