Pagini recente » Cod sursa (job #2747155) | Cod sursa (job #1219713) | Cod sursa (job #779827) | Cod sursa (job #1630470) | Cod sursa (job #2367757)
#include <cstdio>
#include <vector>
#include <queue>
#define INF 0x8FFFFFFF
#define N_MAX 100001
bool visited[N_MAX];
int N, M, start, dist[N_MAX];
std::vector<int> graph[N_MAX];
std::queue<int> q;
int main() {
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%d%d%d", &N, &M, &start);
for (int it = 0; it < M; ++it) {
int x, y;
scanf("%d%d", &x, &y);
graph[--x].push_back(--y);
}
for (int it = 0; it < N; ++it) {
dist[it] = INF;
}
--start;
dist[start] = 0;
visited[start] = true;
q.push(start);
while (!q.empty()) {
int current = q.front(); q.pop();
for (int it = 0; it < graph[current].size(); ++it) {
if (!visited[graph[current][it]]) {
visited[graph[current][it]] = true;
dist[graph[current][it]] = 1 + dist[current];
q.push(graph[current][it]);
}
}
}
for (int it = 0; it < N; ++it) {
printf("%d ", INF == dist[it] ? -1 : dist[it]);
}
return 0;
}