Cod sursa(job #3210556)

Utilizator VargusCsulu Milan Vargus Data 6 martie 2024 17:15:58
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <climits>
#define si short int

using namespace std;

ifstream beir("dijkstra.in");
ofstream kiir("dijkstra.out");

struct adat
{
    si hossz = SHRT_MAX;
    vector < pair <si,si> > sz;
};

vector <adat> x;

struct tav
{
    si hova, hossz;  
};

priority_queue <tav> t;

bool operator < (const tav& a, const tav& b)
{
    return a.hossz > b.hossz;
}

int main()
{
    si csp, cs1, cs2, kolt, el;
    beir >> csp >> el;
    x.resize(csp+1);
    for(int i=1; i<=el; ++i)
    {
        beir >> cs1 >> cs2 >> kolt;
        x[cs1].sz.push_back({cs2, kolt});
    }
    beir.close();
    si kezd = 1;
    t.push({1, 0});
    x[kezd].hossz = 0;
    tav akt;
    while(!t.empty())
    {
        akt = t.top();
        t.pop();
        for(auto &e : x[akt.hova].sz)
        {
            if(x[e.first].hossz == 0)
            {
                continue;
            }
            if(x[e.first].hossz > (akt.hossz + e.second))
            {
                x[e.first].hossz = akt.hossz + e.second;
                t.push({e.first, akt.hossz + e.second});
            }
        }
    }
    
    for(int i=2; i<=csp; ++i)
    {
        if(x[i].hossz == SHRT_MAX)
        {
            kiir << "0";
            continue;
        }
        kiir << x[i].hossz << " ";
    }
    kiir.close();

    return 0;
}