Pagini recente » Cod sursa (job #1823236) | Cod sursa (job #1222002) | Cod sursa (job #1005237) | Cod sursa (job #618199) | Cod sursa (job #1450998)
#include <iostream>
#include <list>
#include <vector>
#include <queue>
#include <bitset>
#define INF 0x3f3f3f3f
const char IN[] = "bfs.in", OUT[] = "bfs.out";
const int NMAX = 100001;
using namespace std;
list<int> G[NMAX];
int N, M, S;
inline void read_data() {
freopen(IN, "r", stdin);
scanf("%d %d %d", &N, &M, &S);
for (int j = 0; j < M; ++j) {
int src, dst;
scanf("%d %d", &src, &dst);
G[src].push_back(dst);
}
fclose(stdin);
}
inline vector<int> bfs(int source) {
queue<int> Q;
bitset<NMAX> visited;
vector<int> dist(N+1, INF);
Q.push(source);
visited[source].flip();
dist[source] = 0;
while (!Q.empty()) {
int node = Q.front(); Q.pop();
for (auto& n : G[node]) {
if (!visited[n]) {
Q.push(n);
visited[n].flip();
dist[n] = dist[node] + 1;
}
}
}
return dist;
}
int main() {
read_data();
freopen(OUT, "w", stdout);
vector<int> dist = bfs(S);
for (int i = 1; i <= N; ++i) {
printf("%d ", (dist[i] > N) ? -1 : dist[i]);
}
fclose(stdout);
return 0;
}