Cod sursa(job #2783360)

Utilizator icnsrNicula Ionut icnsr Data 14 octombrie 2021 12:17:06
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#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("");
}