Pagini recente » Cod sursa (job #2991297) | Cod sursa (job #1680730) | Cod sursa (job #2393841) | Cod sursa (job #1768974) | Cod sursa (job #2380031)
#include <vector>
#include <queue>
#include <fstream>
#include <iostream>
#include <stdio.h>
#include <string.h>
#define SZ 1000000
std::vector<size_t> graf[SZ];
bool viz[SZ];
size_t dist[SZ];
void addMuchie( size_t m1, size_t m2) {
graf[m2].push_back(m1);
}
void bfs(size_t nod) {
std::queue<size_t> nqueue;
nqueue.push(nod);
viz[nod] = true;
dist[nod] = 0;
while (!nqueue.empty()) {
size_t index = nqueue.front();
nqueue.pop();
viz[index] = true;
size_t nr_vecini = graf[index].size();
for (size_t i = 0; i < nr_vecini; i++) {
size_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");
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, 0, SZ);
bfs(i);
if (viz[s] == true)
gFileOut << dist[s] << " ";
else
gFileOut << -1 << " ";
}
return 0;
}