Pagini recente » Cod sursa (job #1605667) | Cod sursa (job #1765877) | Cod sursa (job #908835) | Cod sursa (job #2158092) | Cod sursa (job #1176323)
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
void bfs(vector<vector<long> > &lista_ad, vector<long> &visited, int source) {
queue<long> q;
long node, neighbour, distance;
visited[source] = 0;
q.push(source);
while (q.size() != 0) {
node = q.front();
q.pop();
distance = visited[node] + 1;
for (int i = 0; i < lista_ad[node].size(); i++) {
neighbour = lista_ad[node][i];
if (visited[neighbour] == -1) {
q.push(neighbour);
visited[neighbour] = distance;
}
}
}
}
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
long N, M, id1, id2, S;
scanf("%ld%ld%ld", &N, &M, &S);
vector<vector<long> > lista_ad(N + 1, vector<long>(0, 0));
vector<long> visited(N + 1, -1);
for (int i = 0; i < M; i++) {
scanf("%ld%ld", &id1, &id2);
lista_ad[id1].push_back(id2);
}
bfs(lista_ad, visited, S);
for (int i = 1; i <= N; i++) {
printf("%ld ", visited[i]);
}
return 0;
}