Cod sursa(job #2783347)

Utilizator icnsrNicula Ionut icnsr Data 14 octombrie 2021 11:56:12
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <cstdio>
#include <vector>
#include <queue>

void BFS(std::vector<int>& dists, const std::vector<std::vector<int>>& list, int start)
{
        std::queue<int> q;
        q.push(start);
        dists[start] = 0;

        while(!q.empty())
        {
                const auto node = q.front();
                q.pop();

                for(int v : list[node])
                {
                        if(dists[v] == -1)
                        {
                                q.push(v);
                                dists[v] = dists[node] + 1;
                        }
                }
        }
}

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);
        for(int i = 0; i < m; ++i)
        {
                int x, y;
                std::scanf("%d %d", &x, &y);

                list[x].push_back(y);
        }

        BFS(dists, list, s);

        for(int node = 1; node <= n; ++node)
        {
                printf("%d ", dists[node]);
        }
        puts("");
}