Cod sursa(job #2244264)

Utilizator cosmin.pascaruPascaru Cosmin cosmin.pascaru Data 22 septembrie 2018 15:07:00
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <array>
#include <algorithm>
#include <vector>
#include <stack>
#include <set>
#include <assert.h>
#include <queue>
#include <chrono>


using LL = long long;
using ULL = int long long;

const std::string _problemName = "bfs";

namespace std {
std::ifstream fin(_problemName + ".in");
std::ofstream fout(_problemName + ".out");
}

#define USE_FILES

#ifdef USE_FILES
#define cin fin
#define cout fout
#endif

using graph_t = std::vector< std::vector<int> >;

const int UNVISITED = -1;

std::vector<int> computeMinDistances(const graph_t& graph, int source) {
    std::vector<int> distances(graph.size(), UNVISITED);
    std::queue<int> queue;
    
    queue.push(source);
    distances[source] = 0;
    
    while (!queue.empty()) {
        int node = queue.front();
        queue.pop();

        for (auto neighbour : graph[node]) {
            if (distances[neighbour] == UNVISITED) {
                distances[neighbour] = distances[node] + 1;
                queue.push(neighbour);
            }
        }
    }

    return distances;
}

int main() {


    int n, m, s;
    std::cin >> n >> m >> s;

    graph_t graph(n);

    while (m--) {
        int a, b;
        std::cin >> a >> b;
        --a, --b;

        graph[a].push_back(b);
    }

    auto ans = computeMinDistances(graph, s);

    for (auto i : ans) {
        std::cout << i << ' ';
    }
    std::cout << '\n';

    return 0;
}