Cod sursa(job #2663606)

Utilizator rusuandrei32Rusu Andrei-Cristian rusuandrei32 Data 26 octombrie 2020 21:20:53
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.54 kb
#include <iostream>
#include <fstream>
#include <list>
#include <vector>
#include <queue>

using namespace std;

ifstream in("bfs.in");
ofstream out("bfs.out");

class Graph {
    int vertices, start;
    list <int> *adj;

    vector <int> costs;
    vector <bool> visited;

public:
    Graph(int v, int start) : vertices(v), start(start), visited(v), costs(v) {
        adj = new list <int>[v];
    }

    void addEdge(int from, int to) {
        adj[from].push_back(to);
    }

    void showAnswer() {
        for (int i = 1; i < vertices; ++i) {
            out << (costs[i] == 0 ? (i == start ? 0 : -1) : costs[i]);
            if (i + 1 != vertices)
                out << " ";
        }
    }

    void solve() {
        queue <int> q;
        
        q.push(start);

        while (q.size()) {
            int top = q.front();
            q.pop();

            if (visited[top])
                continue;

            visited[top] = true;

            for (auto &adjVal : adj[top]) {
                if (!visited[adjVal]) {
                    q.push(adjVal);
                    costs[adjVal] = costs[top] + 1;
                }
            }
        }
    }

};

int main() {

    int N, M, S;

    in >> N >> M >> S;

    Graph *myGraph = new Graph(N + 1, S);

    while (M--) {
        int from, to;
        in >> from >> to;
        myGraph -> addEdge(from, to);
    }

    myGraph -> solve();

    myGraph -> showAnswer();

    in.close();
    out.close();
    
    return 0;
}