Cod sursa(job #2678701)

Utilizator xtreme77Patrick Sava xtreme77 Data 28 noiembrie 2020 15:08:11
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <algorithm>
#include <fstream>
#include <vector>

using namespace std;

vector <int> bfs(int startingNode, vector < vector <int> > &graph) {
    vector <int> Queue(graph.size() + 1);
    int back = 0;
    int front = 0;
    vector <int> distances (graph.size(), -1);
//    Queue.push(startingNode);
    Queue[++front] = startingNode;
    distances[startingNode] = 0;
    while (back < front /*!Queue.empty()*/) {
        ++ back;
        auto currentNode = Queue[back];//Queue.front();
        // Queue.pop();

        for (auto &neighbour : graph[currentNode]) {
            if (distances[neighbour] == -1) {
                distances[neighbour] = distances[currentNode] + 1;
//                Queue.push(neighbour);
                Queue[++front] = neighbour;
            }
        }
    }
    reverse(distances.begin(), distances.end());
    distances.pop_back();
    reverse(distances.begin(), distances.end());
    return distances;
}

int main() {
    ifstream cin ("bfs.in");
    ofstream cout ("bfs.out");
    int numberOfNodes, numberOfEdges, startingNode;
    cin >> numberOfNodes >> numberOfEdges >> startingNode;
    vector < vector <int> > graph(numberOfNodes + 1);
    for (int index = 0; index <= numberOfEdges; ++ index) {
        int nodeOne, nodeTwo;
        cin >> nodeOne >> nodeTwo;
        graph[nodeOne].push_back(nodeTwo);
    }
    auto result = bfs(startingNode, graph);
    for (auto &elem : result) {
        cout << elem << ' ';
    }
    return 0;
}