Pagini recente » Cod sursa (job #1087154) | Cod sursa (job #2307481) | Cod sursa (job #2050874) | Cod sursa (job #3032991) | Cod sursa (job #1447730)
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
#define NMAX 100002
int N, M, Source, index;
vector <int> A[NMAX];
queue <int> Q;
bool visited[NMAX];
int Cost[NMAX];
void BFS()
{
int i, nod;
for (i = 0; i < 100001; i++)
Cost[i] = -1;
Q.push(Source);
visited[Source] = true;
Cost[Source] = 0;
while (!Q.empty())
{
nod = Q.front();
Q.pop();
for (i = 0; i < A[nod].size(); i++)
if (!visited[A[nod][i]])
{
visited[A[nod][i]] = true;
Cost[A[nod][i]] = Cost[nod] + 1;
Q.push(A[nod][i]);
}
}
}
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
int i, x, y;
scanf("%d %d %d ", &N, &M, &Source);
for (i = 1; i <= M; i++)
{
scanf("%d %d ", &x, &y);
A[x].push_back(y);
}
BFS();
for (i = 1; i <= N; i++)
printf("%d ", Cost[i]);
printf("\n");
return 0;
}