Cod sursa(job #2861944)

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

using namespace std;

typedef pair<int, int> sulyEsVeg;

int a = 2147483647;

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

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

    list<sulyEsVeg> csucsok[csucsokSzama];

    int x, y, z;

    for (int i = 0; i < elekSzama; i++)
    {
        f >> x >> y >> z;

        csucsok[x].push_back(make_pair(z, y));
        csucsok[y].push_back(make_pair(z, x));
    }

    int tavolsag[csucsokSzama];
    bool bejart[csucsokSzama] = {false};
    fill_n(tavolsag, csucsokSzama, a);

    priority_queue<sulyEsVeg, vector<sulyEsVeg>, greater<sulyEsVeg> > sor;

    list<sulyEsVeg> :: iterator it;

    sor.push(make_pair(0, 0));
    tavolsag[0] = 0;

    sulyEsVeg elem;
    int suly, ertek;

    while(!sor.empty())
    {
        elem = sor.top();
        sor.pop();

        if (bejart[elem.second] == true)
        {
            continue;
        }

        bejart[elem.second] = true;

        for (it = csucsok[elem.second].begin(); it != csucsok[elem.second].end(); it++)
        {
            suly = it->first;
            ertek = it->second;

            if (suly + elem.first < tavolsag[ertek])
            {
                tavolsag[ertek] = suly + elem.first;
                sor.push(make_pair(tavolsag[ertek], ertek));
            }
        }
    }

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

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

    return 0;
}