Pagini recente » Cod sursa (job #401347) | Cod sursa (job #319601) | Cod sursa (job #2440068) | Cod sursa (job #1822496) | Cod sursa (job #2134132)
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
#define NMAX (100000 + 3)
#define MMAX (1000000 + 3)
using namespace std;
void BFS(int n, int source, int distance[], vector<int> neighbors[]) {
for (int i = 1; i <= n; ++i) {
distance[i] = -1;
}
distance[source] = 0;
queue<int> queue;
queue.push(source);
while (!queue.empty()) {
int node = queue.front();
queue.pop();
for (const auto &ngbr : neighbors[node]) {
if (distance[ngbr] == -1) {
distance[ngbr] = distance[node] + 1;
queue.push(ngbr);
}
}
}
}
int main() {
ifstream f("bfs.in");
ofstream g("bfs.out");
vector<int> neighbors[NMAX];
int distance[NMAX];
int n, m, i, j, source;
f >> n >> m >> source;
for (; m; --m) {
int x, y;
f >> x >> y;
neighbors[x].push_back(y);
}
BFS(n, source, distance, neighbors);
for (i = 1; i <= n; ++i) {
g << distance[i] << " ";
}
return 0;
}