Pagini recente » Cod sursa (job #1965027) | Cod sursa (job #1470813) | Cod sursa (job #2421521) | Cod sursa (job #355378) | Cod sursa (job #2855002)
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
#define MAX_N 100000
vector<int> graph[MAX_N];
queue<int> bfsQueue;
int dist[MAX_N];
void addEdge(int a, int b) {
graph[a].push_back(b);
}
void bfs(int node) {
int qFront;
bfsQueue.push(node);
dist[node] = 1;
while (!bfsQueue.empty()) {
qFront = bfsQueue.back();
bfsQueue.pop();
for (const int &neighbour : graph[qFront])
if (dist[neighbour] == 0) {
bfsQueue.push(neighbour);
dist[neighbour] = dist[qFront] + 1;
}
}
}
int main() {
FILE *fin, *fout;
fin = fopen("bfs.in", "r");
fout = fopen("bfs.out", "w");
int n, m, i, a, b, k;
fscanf(fin, "%d%d%d", &n, &m, &k);
for (i = 0; i < m; ++i) {
fscanf(fin, "%d%d", &a, &b);
addEdge(a, b);
}
bfs(k);
for (i = 1; i <= n; ++i)
fprintf(fout, "%d ", dist[i] - 1);
fclose(fin);
fclose(fout);
return 0;
}