Cod sursa(job #1425116)

Utilizator GilgodRobert B Gilgod Data 26 aprilie 2015 18:22:25
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

#define NMAX 100001
#define Inf 0x3f3f3f3f
#define min(a,b) ((a)<(b))?(a):(b)

const char IN[] = "bfs.in", OUT[] = "bfs.out";

using namespace std;

vector<int> G[NMAX];
int N;
int dist[NMAX];
queue<int> Q;
int S;

void readData() {
	freopen(IN, "r", stdin);
	int M;
	scanf(" %d%d%d", &N, &M, &S);
	for (int i = 0; i < M; ++i) {
		int s, d;
		scanf(" %d%d", &s, &d);
		G[s].push_back(d);
	}
	fclose(stdin);
}

inline void bfs(int source) {
	memset(dist, Inf, sizeof(dist));
	dist[source] = 0;
	Q.push(source);
	while (!Q.empty()) {
		int v = Q.front(); Q.pop();
		for (const int n : G[v]) {
			if (dist[n] > dist[v] + 1) {
				Q.push(n);
				dist[n] = min(dist[n], dist[v] + 1);
			}
		}
	}
}

int main() {
	readData();
	bfs(S);
	freopen(OUT, "w", stdout);
	for (int i = 1; i <= N; ++i) {
		printf("%d ", (dist[i]==Inf)?(-1):(dist[i]));
	}
	printf("\n");
	fclose(stdout);
}