Cod sursa(job #245052)

Utilizator mihai.cuculiciCuculici Mihail mihai.cuculici Data 16 ianuarie 2009 17:25:51
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
#include <vector>
#define NMAX 100010
using namespace std;

int N, M, L, Start;
vector <int> A[NMAX];
int G[NMAX], S[NMAX], C[NMAX];

void BFS(int nod)
{
	int i, j;
	for(i=0;i<=NMAX;i++) C[i]=-1;
	//	Introduc nodul de start in coada
	L = 1;
	C[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(C[A[S[i]][j]]==-1) S[++L] = A[S[i]][j], C[S[L]] = C[S[i]] + 1;
}	

int main()
{
    ifstream f ("bfs.in");
    ofstream g ("bfs.out");
	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<<C[i]<<" ";
	f.close();
	g.close();
	return 0;
}