Pagini recente » Cod sursa (job #1046958) | Cod sursa (job #2831562) | Cod sursa (job #75119) | Cod sursa (job #1309706) | Cod sursa (job #2211181)
#include <iostream>
#include <fstream>
#define N 100001
#define M 1000001
std::ifstream fin("bfs.in");
std::ofstream fout("bfs.out");
int start[N], value[M], next[M], count;
inline void add(int from, int to) {
++count;
value[count] = to;
next[count] = start[from];
start[from] = count;
}
int q[M], st, dr, r[N];
void bfs(int x) {
int dist = r[x] + 1;
int p = start[x], y;
while (p != 0) {
y = value[p];
if (r[y] != -1) {
p = next[p] ;
continue ;
}
r[y] = dist ;
q[++dr] = y ;
p = next[p] ;
}
}
int main() {
int n, m, s, x, y ;
fin >> n >> m >> s;
for (int i = 0; i < m; ++i) {
fin >> x >> y ;
add(x, y) ;
}
for (int i = 1; i <= n; ++i) {
r[i] = -1 ;
}
q[0] = s ;
r[s] = 0 ;
while (st <= dr) {
bfs(q[st]) ;
++st ;
}
for (int i = 1; i <= n; ++i)
fout << r[i] << ' ';
}