Cod sursa(job #3158369)

Utilizator Steven23XHuma Stefan-Dorian Steven23X Data 18 octombrie 2023 15:39:53
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

std::ifstream f("bfs.in");
std::ofstream g("bfs.out");

const int MAX_N = 10000;
std::vector<std::vector<int>> adjacencyList(MAX_N + 1);
int vis[MAX_N + 1];

// construire lista adiacenta
void buildAdjacencyList(int n, int m)
{
    for (int i = 0; i < n; ++i)
    {
        adjacencyList[i].clear();
    }

    for (int i = 0; i < m; i++)
    {
        int u, v;
        f >> u >> v;
        if (u != v)
            adjacencyList[u].push_back(v);
    }
}

// implementare bfs
void BFS(int node, std::vector<int> &d)
{
    std::queue<int> c;
    c.push(node);

    while (!c.empty())
    {
        int n = c.front();
        c.pop();

        vis[n] = 1;

        for (auto next : adjacencyList[n])
        {
            if (!vis[next])
            {
                d[next] = d[n] + 1;
                c.push(next);
                vis[next] = 1;
            }
        }
    }
}

int main()
{
    if (!f.is_open())
    {
        std::cerr << "Eroare deschidere fisier\n";
        return 1;
    }

    int n, m, s;
    f >> n >> m >> s;

    buildAdjacencyList(n, m);

    std::vector<int> d(n + 1);
    BFS(s, d);

    for (int i = 1; i < d.size(); i++)
    {
        if (i == s)
            g << 0 << " ";
        else if (d[i] == 0)
            g << -1 << " ";
        else
            g << d[i] << " ";
    }

    return 0;
}