Cod sursa(job #2426678)

Utilizator TheShark62FMI Cristian-Andrei Ionescu TheShark62 Data 29 mai 2019 01:19:39
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include<iostream>
#include<fstream>
#include<list>
#include<queue>

using namespace std;

unsigned int n, m, start;
list<unsigned int> listaAdj[100001];
int nivele[100001];
queue<unsigned int> coada;

void citire() {
	ifstream in("bfs.in");

	in >> n >> m >> start;
	for (int i = 0; i < m; i++) {
		unsigned int x, y;
		in >> x >> y;
		listaAdj[x].push_back(y);
	}
	in.close();
}

void bfs(unsigned int x) {
	unsigned int nivel = 0;

	coada.push(x);

	while (!coada.empty()) {
		unsigned int nod = coada.front();
		coada.pop();

		for (unsigned int subnod : listaAdj[nod])
			if (!nivele[subnod] && subnod != x) {
				coada.push(subnod);
				nivele[subnod] = nivele[nod] + 1;
			}
	}
}

int main() {
	citire();

	bfs(start);

	ofstream out("bfs.out");

	for (unsigned int i = 1; i <= n; i++)
		if (nivele[i] == 0 && i != start)
			out << -1 << ' ';
		else
			out << nivele[i] << ' ';

	out.close();

	return 0;
}