Cod sursa(job #3157259)

Utilizator RaicanMihaiRaican Mihai RaicanMihai Data 14 octombrie 2023 22:34:54
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.55 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <queue>
using namespace std;

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

void bfs (int S, int N, vector<list<int>> adjacencyList) {
    int startNode = S;
    vector <bool> visited((N + 1), false);
    vector <int> distance((N + 1), 0);
    queue <int> queue;

    visited[startNode] = true;
    queue.push(startNode);

    while (!queue.empty()) {
        startNode = queue.front();
        queue.pop();

        for (const int neighbor : adjacencyList[startNode]) {
            if (!visited[neighbor]) {
                visited[neighbor] = true;
                queue.push(neighbor);
                distance[neighbor] = distance[startNode] + 1;
            }
        }
    }

    for (int i = 1; i <= N; i++) {
        if (i != S & distance[i] == 0)
            distance[i] = -1;
        fout << distance[i] << " ";
    }
}

vector<list<int>> from_edges_to_list (int n, list<pair<int, int>> edges) {

    vector<list<int>> adjacencyList;
    adjacencyList.resize(n + 1);
    for (auto p : edges) {
        adjacencyList[p.first].push_back(p.second);
    }

    return adjacencyList;
}

int main() {
    int N, M, S;
    list <pair <int, int>> edges;
    fin >> N >> M >> S;
    for (int i = 0; i < M; i++) {
        int x, y;
        fin >> x >> y;
        edges.push_back(make_pair(x, y));
    }

    // creez lista de adiacenta
    vector<list <int>> adjacencyList = from_edges_to_list(N, edges);

    bfs(S, N, adjacencyList);
}