Pagini recente » Cod sursa (job #1126204) | Cod sursa (job #1727901) | Cod sursa (job #320665) | Cod sursa (job #219167) | Cod sursa (job #1425116)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 100001
#define Inf 0x3f3f3f3f
#define min(a,b) ((a)<(b))?(a):(b)
const char IN[] = "bfs.in", OUT[] = "bfs.out";
using namespace std;
vector<int> G[NMAX];
int N;
int dist[NMAX];
queue<int> Q;
int S;
void readData() {
freopen(IN, "r", stdin);
int M;
scanf(" %d%d%d", &N, &M, &S);
for (int i = 0; i < M; ++i) {
int s, d;
scanf(" %d%d", &s, &d);
G[s].push_back(d);
}
fclose(stdin);
}
inline void bfs(int source) {
memset(dist, Inf, sizeof(dist));
dist[source] = 0;
Q.push(source);
while (!Q.empty()) {
int v = Q.front(); Q.pop();
for (const int n : G[v]) {
if (dist[n] > dist[v] + 1) {
Q.push(n);
dist[n] = min(dist[n], dist[v] + 1);
}
}
}
}
int main() {
readData();
bfs(S);
freopen(OUT, "w", stdout);
for (int i = 1; i <= N; ++i) {
printf("%d ", (dist[i]==Inf)?(-1):(dist[i]));
}
printf("\n");
fclose(stdout);
}