Cod sursa(job #1277723)

Utilizator evodaniVasile Daniel evodani Data 28 noiembrie 2014 01:15:36
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
FILE *fin, *fout;

#define NMAX 100005

struct step {
	int node, dist;
};

int bfs (vector <vector<int> > &graf, int n,  int startNode, int finishNode) {
	queue<step> Q;
	int nbs, node, i;
	bool inQueue[NMAX];
	memset(inQueue, 0, sizeof(bool) * NMAX);

	step aux, aux2;
	aux.node = startNode; aux.dist = 0;
	Q.push(aux);

	while (!Q.empty()) {
		aux = Q.front(); Q.pop(); node = aux.node;

		if (node == finishNode) return aux.dist;

		nbs = graf[node].size();
		for (i=0; i<nbs; ++i) {
			if (!inQueue[graf[node][i]]) {
				aux2.node = graf[node][i];
				aux2.dist = aux.dist + 1;
				Q.push(aux2);
				inQueue[graf[node][i]] = 1;
			}
		}
	}

	return -1;
}

int main() {
	fin = fopen ("bfs.in", "r"); fout = fopen ("bfs.out", "w");

	int n, m, s, i, a, b;
	fscanf (fin, "%d%d%d", &n, &m, &s);
	vector <vector<int> > graf(n+1);

	for (i=1; i<=m; ++i) {
		fscanf (fin, "%d%d", &a, &b);
		graf[a].push_back(b);
	}

	for (i=1; i<=n; ++i) {
		fprintf (fout, "%d ", bfs(graf, n, s, i));
	}

	fclose(fin); fclose(fout);
	return 0;
}