Cod sursa(job #2511671)

Utilizator mariaghinescu22Ghinescu Maria mariaghinescu22 Data 19 decembrie 2019 16:15:37
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("bfs.in");
ofstream out("bfs.out");

const int N = 1000001;
int n, m, nr, s, q[N], distances[N];
int vf[2 * N], lst[N], urm[2 * N];

void adauga(int x, int y) {
	vf[++nr] = y;
	urm[nr] = lst[x];
	lst[x] = nr;
}

struct comp {
	int x, y;
}v[N];

int main() {
	cin >> n >> m >> s;
	for (int i = 1; i <= m; i++) {
		cin >> v[i].x >> v[i].y;
		adauga(v[i].x, v[i].y);
	}
	for (int i = 1; i <= n; i++) distances[i] = -1;
	int st = 0, dr = -1;
	q[++dr] = s;
	distances[s] = 0;
	while (st <= dr) {
		//scot x din q
		int x = q[st++];
		for (int p = lst[x]; p != 0; p = urm[p]) {
			int y = vf[p];
			if (distances[y] == -1) {
				q[++dr] = y;
				distances[y] = 1 + distances[x];
			}
		}
	}
	for (int i = 1; i <= n; i++) cout << distances[i] << ' ';
	return 0;
}