Cod sursa(job #2285249)

Utilizator Alexghita96Ghita Alexandru Alexghita96 Data 18 noiembrie 2018 13:06:31
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

void read(int &n, int &m, int &s, vector<vector<int> > &graph) {
    int source, target;

    scanf("%d %d %d", &n, &m, &s);

    for (int i = 0; i < n; i++) {
        graph.push_back(vector<int>());
    }

    for (int i = 0; i < m; i++) {
        scanf("%d %d", &source, &target);
        graph[source - 1].push_back(target - 1);
    }
}

vector<int> bfs(vector<vector<int> > graph, int source) {
    queue<int> fringe;
    int current_node;
    vector<int> distance(graph.size(), -1);

    fringe.push(source);
    distance[source] = 0;

    while (!fringe.empty()) {
        current_node = fringe.front();
        fringe.pop();

        for (vector<int>::iterator it = graph[current_node].begin(); it != graph[current_node].end(); it++) {
            if (distance[*it] == -1) {
                distance[*it] = distance[current_node] + 1;
                fringe.push(*it);
            }
        }
    }

    return distance;
}

int main() {
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);

    int n, m, s;
    vector<vector<int> > graph;

    read(n, m, s, graph);

    vector<int> distance = bfs(graph, s - 1);

    for (vector<int>::iterator it = distance.begin(); it != distance.end(); it++) {
        printf("%d ", *it);
    }

    return 0;
}