Cod sursa(job #2861934)

Utilizator PalffyLehelPalffy Lehel PalffyLehel Data 4 martie 2022 18:33:30
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>
#include <list>
#include <queue>

using namespace std;

int a = 2147483647;

int main()
{
    ifstream f("dijkstra.in");
    ofstream g("dijkstra.out");

    int csucsokSzama, elekSzama;
    f >> csucsokSzama >> elekSzama;

    list< pair<int, int> > csucsok[csucsokSzama];
    list< pair<int, int> > :: iterator it;

    int x, y, z;
    for (int i = 0; i < elekSzama; i++)
    {
        f >> x >> y >> z;
        csucsok[x - 1].push_back(make_pair(z, y - 1));

    }

    priority_queue< pair<int, int>, vector< pair<int, int> >, greater< pair <int, int> > > sor;
    sor.push(make_pair(0, 0));

    int hossz[csucsokSzama];
    fill_n(hossz, csucsokSzama, a);
    hossz[0] = 0;

    pair<int, int> elem;
    while (!sor.empty())
    {
        elem = sor.top();
        sor.pop();

        for(it = csucsok[elem.second].begin(); it != csucsok[elem.second].end(); it++)
        {
            if (hossz[it->second] > hossz[elem.second] + it->first)
            {
                hossz[it->second] = hossz[elem.second] + it->first;
                sor.push(*it);
            }
        }
    }

    for (int i = 1; i < csucsokSzama; i++)
    {
        if (hossz[i] == a)
        {
            g << 0 << " ";
        }

        else
        {
            g << hossz[i] << " ";
        }
    }

    return 0;
}