Pagini recente » Cod sursa (job #2364133) | Cod sursa (job #2795814) | Cod sursa (job #1263540) | Cod sursa (job #246750) | Cod sursa (job #1656151)
#include <cstdio>
#include <bitset>
#include <vector>
#include <cstdlib>
#include <queue>
using namespace std;
const int NMAX = 100002;
vector<int> *graph;
queue<int> Q;
int pathMinimum[NMAX];
int main () {
freopen ("bfs.in", "r", stdin);
freopen ("bfs.out", "w", stdout);
int N, M, source;
scanf ("%d%d%d", &N, &M, &source);
graph = new vector<int>[N + 1];
while (M--) {
int a, b;
scanf ("%d%d", &a, &b);
graph[a].push_back(b);
}
Q.push (source);
pathMinimum[source] = 1;
while (!Q.empty()) {
int node;
node = Q.front ();
Q.pop();
for (auto i : graph[node])
if (!pathMinimum[i]) {
pathMinimum[i] = pathMinimum[node] + 1;
Q.push(i);
}
}
for (int i = 1; i <= N; ++i)
if (pathMinimum[i])
printf ("%d ", pathMinimum[i] - 1);
else
printf ("-1 ");
}