Cod sursa(job #502831)

Utilizator GodiesVlad Voicu Godies Data 20 noiembrie 2010 15:58:57
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <vector>

#define UND (-1)

using namespace std;

int main()
{
	FILE *f = fopen("bfs.in", "rt");
	FILE *g = fopen("bfs.out", "wt");
	int no, n, node, i, x, y;
	fscanf(f, "%d%d%d" , &no, &n, &node);
	node--;
	vector <int> *v;
	v = new vector <int> [no];
	for (i = 0; i < n; i++) {
		fscanf (f, "%d%d", &x, &y);
		v[--x].push_back(--y);
	}	
	queue <int> q;
	int *d = new int [no];
	for (i = 0; i < no; i++)
		d[i] = UND;
	d[node] = 0;
	q.push(node);
	while (!q.empty()) {
		int current = q.front();
		q.pop();
		for (vector <int>::iterator it = v[current].begin(); it != v[current].end(); it++) {
			if (d[*it] == UND) {
				d[*it] = d[current] + 1;
				q.push(*it);
			}
		}
	}
	for (i = 0; i < no; i++) {
		printf("%d ", d[i]);
	}
	delete [] v;
	fclose(f);
	fclose(g);	
	return 0;
}