Cod sursa(job #1762592)

Utilizator CaterpillerLeaf Caterpiller Caterpiller Data 23 septembrie 2016 20:37:41
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
#include <fstream>
#include <vector>
#include <queue>

class SimpleDirectedGraph
{
    int mSize;
    std::vector<int> *edges;
public:
    SimpleDirectedGraph(int size)
    {
        mSize = size + 1;
        edges = new std::vector<int>[mSize];
    }
    void addEdge(int a, int b)
    {
        edges[a].push_back(b);
    }
    std::vector<int> computeDistanceFromSource(int s)
    {
        std::vector<int> distances(mSize, -1);
        if (s <= 0 || s >= mSize) return distances;
        std::queue<int> bfs_queue;

        bfs_queue.push(s);
        distances[s] = 0;
        while (!bfs_queue.empty()) {
            int current_vertex = bfs_queue.front();
            bfs_queue.pop();
            for (int vertex : edges[current_vertex]) {
                if (distances[vertex] == -1) {
                    distances[vertex] = distances[current_vertex] + 1;
                    bfs_queue.push(vertex);
                }
            }
        }
        return distances;
    }
};

int main()
{
    std::ifstream input("bfs.in");
    std::ofstream output("bfs.out");
    int n, m, s;

    input >> n >> m >> s;
    SimpleDirectedGraph graph(n);
    for (int i = 0; i < m; ++i) {
        int a, b;
        input >> a >> b;
        graph.addEdge(a, b);
    }
    auto distances = graph.computeDistanceFromSource(s);
    for (int i = 1; i <= n; ++i) output << distances[i] << ' ';
    output << '\n';
    return 0;
}