Cod sursa(job #2380027)

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

#define SZ 1000000

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


bool viz[SZ];
int dist[SZ];


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

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

	nqueue.push(nod);

	viz[nod] = true;

	dist[nod] = 0;

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

		nqueue.pop();

		viz[index] = true;

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

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

			int 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");

	size_t n, m, s, nd, nd1;

	gfile >> n >> m >> s;

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

		addMuchie( nd, nd1);
	}

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

		bfs(i);

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




	return 0;
}