Pagini recente » Cod sursa (job #228885) | Cod sursa (job #3286990) | Cod sursa (job #899223) | Cod sursa (job #2989353) | Cod sursa (job #283632)
Cod sursa(job #283632)
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
#define FIN "bfs.in"
#define FOUT "bfs.out"
#define MAX_N 100015
#define PB push_back
#define SZ(A) (int)((A).size())
int N, M, S;
vector<int> G[MAX_N];
int D[MAX_N];
void read() {
scanf("%d %d %d", &N, &M, &S);
for (int i = 1; i <= M; ++i) {
int a, b;
scanf("%d %d", &a, &b);
G[a].PB(b);
}
}
void BFS(int start) {
queue<int> Q;
memset(D, -1, sizeof(D));
D[start] = 0;
Q.push(start);
while (!Q.empty()) {
int nod = Q.front();
Q.pop();
for (int i = 0; i < SZ(G[nod]); ++i)
if (D[G[nod][i]] == -1) {
D[G[nod][i]] = D[nod] + 1;
Q.push(G[nod][i]);
}
}
}
void solve() {
BFS(S);
for (int i = 1; i <= N; ++i)
printf("%d ", D[i]);
printf("\n");
}
int main() {
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
read();
solve();
return 0;
}