Cod sursa(job #658374)

Utilizator DEYDEY2Tudorica Andrei DEYDEY2 Data 8 ianuarie 2012 18:33:25
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <vector>
#include <stdio.h>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int n,m,L,Start;
vector <int> A[100010];
int G[100010], S[100010], dist[100010];

void BFS(int nod)
{
	int i, j;
	memset(dist, -1, sizeof(dist));
	//	Introduc nodul de start in coada
	L = 1;
	dist[nod] = 0;
	S[L] = nod;
	for (i = 1; i <= L; i++)	//	Elimin pe rand nodurile din coada
		for (j = 0; j < G[S[i]]; j++)	//	Parcurg vecinii nodului ce urmeaza sa fie eliminat
			if (dist[A[S[i]][j]] == -1)
			{
				//	Adaug vecinii nevizitati in coada si le calculez distanta
				S[++L]=A[S[i]][j];
				dist[S[L]]=dist[S[i]] + 1;
			}
}	

int main()
{
	int i,x,y;
	f>>n>>m>>Start;
	//	Citesc arcele si retin graful sub forma de lista de vecini
	for (i = 1; i <= m; i++) 
	{
		f>>x>>y;
		A[x].push_back(y);
	}
	for (i = 1; i <= n; i++) 
		G[i] = A[i].size();
	BFS(Start);
	for (i = 1; i <= n; i++) 
		g<<dist[i]<<' ';
	g<<"\n";
	f.close();
	g.close();
	return 0;
}