Pagini recente » Cod sursa (job #1421099) | Cod sursa (job #2876929) | Cod sursa (job #2894359) | Cod sursa (job #2984178) | Cod sursa (job #2209283)
#include <fstream>
#define N 100001
#define M 1000001
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 dfs(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() {
std::ifstream in("bfs.in");
std::ofstream out("bfs.out");
int i, n, m, s, x, y;
in >> n >> m >> s;
for (i = 0; i < m; ++i) {
in >> x >> y;
add(x, y);
}
for (i = 1; i <= n; ++i) r[i] = -1;
q[0] = s;
r[s] = 0;
while (st <= dr) {
dfs(q[st]);
++st;
}
for (i = 1; i <= n; ++i) out << r[i] << ' ';
}