Pagini recente » Cod sursa (job #2222957) | Cod sursa (job #683084) | Cod sursa (job #1547130) | Cod sursa (job #1980910) | Cod sursa (job #2783360)
#include <cstdio>
#include <vector>
#include <queue>
void BFS(std::vector<int>& dists, std::vector<bool>& visited,
const std::vector<std::vector<int>>& list, int start)
{
std::queue<std::pair<int, int>> q;
q.push({start, start});
visited[start] = true;
while(!q.empty())
{
const auto node = q.front();
q.pop();
dists[node.first] = dists[node.second] + 1;
for(int v : list[node.first])
{
if(!visited[v])
{
visited[v] = true;
q.push({v, node.first});
}
}
}
}
int main()
{
std::freopen("bfs.in", "r", stdin);
std::freopen("bfs.out", "w", stdout);
int n, m, s;
std::scanf("%d %d %d", &n, &m, &s);
std::vector<std::vector<int>> list(n + 1);
std::vector<int> dists(n + 1, -1);
std::vector<bool> visited(n + 1, false);
for(int i = 0; i < m; ++i)
{
int x, y;
std::scanf("%d %d", &x, &y);
list[x].push_back(y);
}
BFS(dists, visited, list, s);
for(int node = 1; node <= n; ++node)
{
printf("%d ", dists[node]);
}
puts("");
}