Cod sursa(job #399753)

Utilizator Omega91Nicodei Eduard Omega91 Data 20 februarie 2010 23:34:51
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <fstream>
#include <bitset>
#include <vector>
using namespace std;

const int NMAX = 100001;
typedef int el_t;

int main()
{
	bitset<NMAX> visited;
	int N, S, m, r = 0, l = 0;
	el_t q[NMAX];
	el_t path[NMAX];
	vector<el_t> G[NMAX];
	ifstream f1("bfs.in");
	f1 >> N >> m >> S;
	do { int a, b; f1 >> a >> b; G[a].push_back(b); } while(--m);
	q[r++] = S;
	path[S] = 1;
	while(r != l) {
		int c;
		vector<el_t>::iterator it;
		visited.set(c = q[l++]);
		
		for (it = G[c].begin(); it != G[c].end(); ++it)
			if (!visited[*it]) path[q[r++] = *it] = path[c] + 1;
		
	}
	freopen("bfs.out", "w", stdout);
	for (int i = 1; i <= N; ++i)
		printf("%d ", path[i] - 1);
	printf("\n");
	return 0;
}