Pagini recente » Borderou de evaluare (job #1592968) | Borderou de evaluare (job #307621) | Borderou de evaluare (job #674098) | Borderou de evaluare (job #1769650) | Cod sursa (job #1974365)
#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > G;
vector<int> dist;
int N, M, S;
void BFS(int k)
{
queue<int> Q;
Q.push(k);
fill(dist.begin(), dist.end(), -1);
dist[k] = 0;
while(!Q.empty()) {
k = Q.front(); Q.pop();
for(auto it : G[k])
if(dist[it] == -1) {
dist[it] = dist[k] + 1;
Q.push(it);
}
}
}
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%d%d%d",&N, &M, &S);
dist.resize(N + 1);
G.resize(N + 1);
for(int i = 1; i <= M; ++i) {
int a,b;
scanf("%d%d", &a, &b);
G[a].push_back(b);
}
BFS(S);
for(int i = 1; i <= N; ++i)
printf("%d ", dist[i]);
printf("\n");
return 0;
}