Cod sursa(job #2383962)

Utilizator AndreiFlorescuAndrei Florescu AndreiFlorescu Data 19 martie 2019 22:04:37
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

#define N_MAX 100000

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

int n, m, nod;
vector<int> Graf[N_MAX + 1];
queue<int> Q;
int sol[N_MAX + 1];

void citire () {
	int x, y;

	file_in >> n >> m >> nod;
	for (int i = 0; i < m; ++i) {
		file_in >> x >> y;
		Graf[x].push_back(y);
	}
}

void bfs (int nod) {
	int act;
	int freq[N_MAX + 1] = {0};
	Q.push(nod);
	freq[nod] = 1;
	while (!Q.empty()) {
		act = Q.front();
		Q.pop();
		int size = Graf[act].size();
		for (int i = 0; i < size; ++i) {
			int y = Graf[act][i];
			if (freq[y] == 0) {
				Q.push(y);
				freq[y]++;
				sol[y] = sol[act] + 1;
			}
		}
	}
}

void afisare () {
	for (int i = 1; i <= n; ++i) {
		if (sol[i] == 0 && i != nod) {
			file_out << "-1 ";
		} else {
			file_out << sol[i] << " ";
		}
	}
}

int main () {
	citire();
	bfs(nod);
	afisare();

	return 0;
}