Cod sursa(job #554260)

Utilizator ELHoriaHoria Cretescu ELHoria Data 14 martie 2011 18:27:15
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <cstdio>
#include <vector>
#include <deque>
using namespace std;

const int FARA_DRUM = -1;
const int N = 100001;

int n,s;
vector<int> vecin[N];
deque<int> coada;
int d[N];

void citire()
{
	int m;
	int a,b;
	scanf("%i%i%i",&n,&m,&s);
	for (int i = 1; i <= m; ++i)
	{
		scanf("%i%i",&a,&b);
		vecin[a].push_back(b);
	}
}

void initializare_bfs()
{
	for (int i = 1; i <= n; ++i)
		d[i] = FARA_DRUM;
}

void bfs()
{
	int nod,nod_dest;
	initializare_bfs();
	coada.push_back(s);
	d[s] = 0;
	while (coada.size() > 0)
	{
		nod = coada.front();
		for (unsigned int i = 0; i < vecin[nod].size(); ++i)
		{
			nod_dest = vecin[nod][i];
			if (d[nod_dest] != FARA_DRUM)
				continue;
			coada.push_back(nod_dest);
			d[nod_dest] = d[nod] + 1;
		}
		coada.pop_front();
	}
}

void afisare()
{
	for (int i = 1; i <= n; ++i)
		printf("%i ",d[i]);
}

int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	citire();
	bfs();
	afisare();
	return 0;
}