Cod sursa(job #1133119)

Utilizator DarkyAngelDarky Angel DarkyAngel Data 4 martie 2014 14:30:01
Problema BFS - Parcurgere in latime Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstdio>
#include <cstring>
#define MAXN 100010

using namespace std;

ifstream f("bfs.in");
ofstream g("bfs.out");

int N, M, S;
vector<int> n[MAXN];
int nrv[MAXN], C[MAXN], cost[MAXN], viz[MAXN];

void read()
{
	int x, y;
	
	f >> N >> M >> S;
	for(int i = 0; i < M; ++i)
	{
		f >> x >> y;
		n[x].push_back(y);
		nrv[x]++;	
	}
	
	f.close();
}

void bfs()
{
	int qi, qf;
	qi = qf = 0;
	memset(cost, -1, MAXN);
	C[0] = S;
	cost[S] = 0;
	viz[S] = 1;
	while(qi <= qf)
	{
		for(int i = 0; i < nrv[C[qi]]; i++)
			if(!viz[n[C[qi]][i]])
				C[++qf] = n[C[qi]][i], viz[n[C[qi]][i]] = 1, cost[C[qf]] = cost[C[qi]]+1;
		
		++qi;
	}
}

void afisare()
{
	for(int i = 1; i <= N; ++i)
	{
		g << cost[i] << " ";
	}
	g.close();
}

int main()
{
	read();
	bfs();
	afisare();
}