Pagini recente » Cod sursa (job #2695742) | Cod sursa (job #1030188) | Cod sursa (job #1675224) | Cod sursa (job #2600033) | Cod sursa (job #1031985)
#include <cstdio>
#include <vector>
#include <memory.h>
#define Nmax 100005
using namespace std;
int N, M, S, lq, L[Nmax], Cost[Nmax], Q[Nmax];
vector <int> A[Nmax];
void Citire()
{
int n1, n2;
scanf("%d%d%d", &N, &M, &S);
for (int i = 1; i <= M; ++i)
{
scanf("%d%d", &n1, &n2);
A[n1].push_back(n2);
}
for (int i = 1; i <= M; ++i)
L[i] = A[i].size();
}
void BFS()
{
memset(Cost, -1, sizeof(Cost));
lq = 1;
Cost[S] = 0;
Q[1] = S;
for (int i = 1; i <= lq; ++i)
for (int j = 0; j < L[Q[i]]; ++j)
if (Cost[A[Q[i]][j]] == -1)
{
Q[++lq] = A[Q[i]][j];
Cost[Q[lq]] = Cost[Q[i]] + 1;
}
}
void Afisare()
{
for (int i = 1; i <= N; ++i)
printf("%d ", Cost[i]);
}
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
Citire();
BFS();
Afisare();
return 0;
}