Cod sursa(job #2330938)

Utilizator igsifvevc avb igsi Data 28 ianuarie 2019 23:28:41
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <algorithm>
#include <fstream>
#include <iterator>
#include <queue>
#include <vector>

std::vector<int> bfs(const int source, const std::vector<std::vector<int>> &G)
{
    std::vector<int> D(G.size(), -1);
    std::queue<int> Q;

    D[source] = 0;
    Q.push(source);

    while (!Q.empty())
    {
        int u = Q.front();
        Q.pop();

        for (const auto v : G[u])
            if (D[v] == -1)
            {
                D[v] = D[u] + 1;
                Q.push(v);
            }
    }
    return D;
}

int main()
{
    std::ifstream fin("bfs.in");
    std::ofstream fout("bfs.out");

    int n, m, s;
    fin >> n >> m >> s;

    int u, v;
    std::vector<std::vector<int>> G(n, std::vector<int>());
    while (m--)
    {
        fin >> u >> v;
        G[u - 1].push_back(v - 1);
    }

    auto D = bfs(s - 1, G);

    std::copy(D.begin(), D.end(), std::ostream_iterator<int>(fout, " "));
    fout << '\n';

    return 0;
}