Pagini recente » Cod sursa (job #2710634) | Cod sursa (job #882179) | Cod sursa (job #1022223) | Cod sursa (job #1459578) | Cod sursa (job #726634)
Cod sursa(job #726634)
#include<cstdio>
#include<vector>
using namespace std;
const int M = 1000002;
const int N = 100002;
int n, m, s, x[N], dist[N];
vector <int> v[M];
void citire() {
scanf("%d%d%d", &n, &m, &s);
for (int i = 1; i <= m; ++i) {
int x1, y1;
scanf("%d%d", &x1, &y1);
v[x1].push_back(y1);
}
}
void bfs() {
int p = 0, q = 0;
x[0] = s;
while (p <= q) {
for (int i = 0; i < (int) v[x[p]].size(); ++i) {
int xx = v[x[p]][i];
if ( (xx != s) && (dist[xx] > dist[x[p]] + 1 || dist[xx] == 0) ) {
dist[xx] = dist[x[p]] + 1;
x[++q] = xx;
}
}
++p;
}
}
int main() {
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
citire();
bfs();
for (int i = 1; i <= n; ++i)
if (i != s && dist[i] == 0)
dist[i] = -1;
for (int i = 1; i <= n; ++i)
printf("%d ", dist[i]);
printf("\n");
return 0;
}