Pagini recente » Cod sursa (job #2334256) | Cod sursa (job #2421521) | Cod sursa (job #2316835) | Cod sursa (job #925759) | Cod sursa (job #1049195)
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
#define maxN 100005
vector <int> muchii[maxN];
queue <int> Q;
int cost[maxN];
bool viz[maxN];
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
int N, M, S, x, y;
scanf("%d %d %d", &N, &M, &S);
for(int i = 0; i < M; ++i) {
scanf("%d %d", &x, &y);
muchii[x].push_back(y);
}
for(int i = 0; i < N; ++i) {
cost[i] = -1;
}
viz[S - 1] = true;
cost[S - 1] = 0;
Q.push(S);
while(!Q.empty()) {
int node = Q.front();
Q.pop();
for(unsigned int i = 0; i < muchii[node].size(); ++i) {
int currNode = muchii[node][i];
if(viz[currNode - 1])
continue;
viz[currNode - 1] = true;
cost[currNode - 1] = cost[node - 1] + 1;
Q.push(currNode);
}
}
for(int i = 0; i < N; ++i)
printf("%d ", cost[i]);
return 0;
}