Cod sursa(job #2531568)

Utilizator radustn92Radu Stancu radustn92 Data 26 ianuarie 2020 14:18:46
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;

const int NMAX = 100505;

int N, M, source;
vector<int> graph[NMAX];

void read() {
	cin >> N >> M >> source;
	int x, y;
	for (int edgeIdx = 0; edgeIdx < M; edgeIdx++) {
		cin >> x >> y;
		graph[x].push_back(y);
	}
}

void bfs(int source) {
	vector<int> D(N + 1, N);
	queue<int> queue;
	D[source] = 0;
	queue.push(source);

	while (!queue.empty()) {
		int node = queue.front();
		queue.pop();

		for (auto neighbour : graph[node]) {
			if (D[neighbour] > D[node] + 1) {
				D[neighbour] = D[node] + 1;
				queue.push(neighbour);
			}
		}
	}

	for (int i = 1; i <= N; i++) {
		if (D[i] == N) {
			cout << "-1 ";
			printf("-1 ");
		} else {
			cout << D[i] << " ";
		}
	}
	cout << "\n";
}

int main() {
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);

	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	read();
	bfs(source);
	return 0;
}