Pagini recente » Cod sursa (job #1359886) | Cod sursa (job #1361394) | Cod sursa (job #2404336) | Cod sursa (job #3200562) | Cod sursa (job #2380027)
#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;
}