Cod sursa(job #562195)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 22 martie 2011 16:21:20
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <stdio.h>
#include <list>
#include <deque>
using namespace std;

const int DIM = 100005;

int N, M, Dst[DIM];
struct nod { int n, d; } C[DIM], S;

list <int> V[DIM];

void bfs ()
{
	int p = 0, u = 0;
	nod x;
	list <int> :: iterator it;
	
	C[0] = S;
	Dst[S.n] = 0;
	
	while (p <= u)
	{
		for (it = V[C[p].n].begin(); it != V[C[p].n].end(); it++)
			if (Dst[*it] == -1)
			{
				x.n = *it;
				x.d = C[p].d + 1;
				C[++u] = x;
				Dst[x.n] = x.d;
			}
		p++;
	}	
}

int main ()
{
	freopen ("bfs.in", "r", stdin);
	freopen ("bfs.out", "w", stdout);
	
	scanf ("%d%d%d", &N, &M, &S.n);
	for (int i = 0, a, b; i < M; i++)
	{
		scanf ("%d%d", &a, &b);
		V[a].push_back (b);
	}
	for (int i = 1; i <= N; i++)
		Dst[i] = -1;
	
	bfs ();
	
	for (int i = 1; i <= N; i++)
		printf ("%d ", Dst[i]);
	
	return 0;
}