Cod sursa(job #2239059)

Utilizator Raoul_16Raoul Bocancea Raoul_16 Data 8 septembrie 2018 20:39:57
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <vector>
const std::string programName = "dijkstra";
std::ifstream f(programName + ".in");
std::ofstream g(programName + ".out");
const int MAX = 5e4, INF = 0x7E7E7E7E;
int N, M, Dist[MAX + 5];
std::vector < std::pair <int, int> > Graph[MAX + 5];
void read();
void print();
void Dijkstra();
int main() {
    read();
    Dijkstra();
    print();
    return 0x0;
}
void read() {
    f >> N >> M;
    for (int i = 1; i <= M; ++i) {
        int x, y, cost;
        f >> x >> y >> cost;
        Graph[x].emplace_back(y, cost);
    }
}
void print() {
    for (int i = 2; i <= N; ++i)
        g << (Dist[i] == INF ? 0 : Dist[i]) << ' ';
    g << "\n";
}
void Dijkstra() {
    bool use[MAX + 5];
    for (int i = 2; i <= N; ++i)
        Dist[i] = INF;
    Dist[1] = 0;
    int min, Xcopy = 0;
    for (int i = 1; i <= N; ++i) {
        min = INF;
        for (int j = 1; j <= N; ++j)
            if (!use[j] and Dist[j] < min)
                    min = Dist[j], Xcopy = j;
        use[Xcopy] = true;
        for (const auto& edge : Graph[Xcopy])
            if(Dist[edge.first] > Dist[Xcopy] + edge.second)
                Dist[edge.first] = Dist[Xcopy] + edge.second;
    }
}