Cod sursa(job #2380039)

Utilizator Reznicencurol.tester Reznicencu Data 14 martie 2019 13:45:38
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <vector>
#include <queue>
#include <fstream>
#include <iostream>
#include <stdio.h>
#include <string.h>

#define nsize_t unsigned long long

#define SZ 1000000

std::vector<nsize_t> graf[SZ];

bool viz[SZ];
nsize_t dist[SZ];


void addMuchie( nsize_t m1, nsize_t m2) {
	graf[m2].push_back(m1);
}

void bfs(nsize_t nod) {
	std::queue<nsize_t> nqueue;

	nqueue.push(nod);

	viz[nod] = true;

	dist[nod] = 0;

	while (!nqueue.empty()) {
		nsize_t index = nqueue.front();

		nqueue.pop();

		viz[index] = true;

		nsize_t nr_vecini = graf[index].size();

		for (nsize_t i = 0; i < nr_vecini; i++) {

			nsize_t vecin = graf[index][i];

			if (!viz[vecin]) {
				viz[vecin] = true;

				dist[vecin] = dist[index] + 1;

				nqueue.push(vecin);
			}
		}
	}
}

int main() {
	std::ifstream gfile("bfs.in");
	std::ofstream gFileOut("bfs.out");

	nsize_t n, m, s, nd, nd1;

	gfile >> n >> m >> s;

	for (nsize_t i = 0; i < m; i++) {
		gfile >> nd >> nd1;

		addMuchie( nd, nd1);
	}

	for (nsize_t i = 1 ; i <= n; i++) {
		memset(viz, 0, SZ);
		memset(dist, 0, SZ);

		bfs(i);

		if (viz[s] == true) 
			gFileOut << dist[s]  << " ";
		else 
			gFileOut << -1 << " ";
	
	}

	return 0;
}