Pagini recente » Cod sursa (job #2057389) | Cod sursa (job #2184985) | Cod sursa (job #1384864) | Monitorul de evaluare | Cod sursa (job #246764)
Cod sursa(job #246764)
#include <cstdio>
#include <vector>
using namespace std;
#define MAXN 100005
#define pb push_back
int N, M, S;
vector <int> lv[MAXN];
int d[MAXN], cd[MAXN];
void read () {
int a, b;
for (scanf ("%d %d %d", &N, &M, &S); M; -- M) {
scanf ("%d %d", &a, &b);
lv[a].pb(b);
}
}
void BFS (int nod) {
memset (d, -1, sizeof (d));
d[nod] = 0;
int ended;
cd[ended = 0] = nod;
for (int pas = 0; pas <= ended; ++ pas) {
int n = cd[pas], sz = lv[n].size();
for (int i = 0; i < sz; ++ i)
if (d[lv[n][i]] == -1) {
d[lv[n][i]] = d[n] + 1;
cd[++ended] = lv[n][i];
}
}
}
void solve () {
BFS (S);
for (int i = 1; i <= N; ++ i) printf ("%d ", d[i]);
printf ("\n");
}
int main () {
freopen ("bfs.in", "r", stdin);
freopen ("bfs.out", "w", stdout);
read ();
solve ();
return 0;
}