Cod sursa(job #2677786)

Utilizator TheGodFather2131Alexandru Miclea TheGodFather2131 Data 27 noiembrie 2020 15:07:40
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
//ALEXANDRU MICLEA

#include <vector>
#include <algorithm>
#include <string>
#include <string.h>
#include <cstring>
#include <queue>
#include <map>
#include <set>
#include <unordered_map>
#include <time.h>
#include <iomanip>
#include <deque>
#include <math.h>
#include <cmath>
#include <assert.h>
#include <stack>
#include <bitset>
#include <random>
#include <chrono>
#include <assert.h>

using namespace std;

#include <fstream>
//ifstream cin("input.in"); ofstream cout("output.out");
ifstream cin("bfs.in"); ofstream cout("bfs.out");

//VARIABLES

int lv[100005];
vector <int> gr[100005];
int ans[100005];

queue <pair <int, int> > q;

//FUNCTIONS

void bfs(int nod) {

	q.push({nod, 0});
	ans[nod] = 0;

	while (!q.empty()) {
		int pos = q.front().first;
		int lv = q.front().second;
		q.pop();

		for (auto& x : gr[pos]) {
			if (ans[x] == 1e9) {
				q.push({ x, lv + 1 });
				ans[x] = lv + 1;
			}
		}
	}
}

//MAIN

int main() {

	int n, m, nod;
	cin >> n >> m >> nod;

	for (int i = 1; i <= n; i++) ans[i] = 1e9;

	for (int i = 1; i <= m; i++) {
		int x, y;
		cin >> x >> y;

		gr[x].push_back(y);
	}

	bfs(nod);

	for (int i = 1; i <= n; i++) {
		if (ans[i] == 1e9) cout << -1 << " ";
		else cout << ans[i] << " ";
	}

	return 0;
}