Cod sursa(job #2861596)

Utilizator kontexVeres Norbert kontex Data 4 martie 2022 09:47:27
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.66 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

int const dMax=50005;
int d[dMax];
int csucsok,elek;
int vegtelen (1<<30);

struct comp
{
    bool operator()(int x,int y)
    {
        return d[x] > d[y];
    }
};
vector<pair<int,int> >graf [dMax];
priority_queue<int,vector<int>,comp> sor;
bool jart[dMax];

void kiir()
{
    ofstream out("dijkstra.out");
    for(int i=2;i<=csucsok;i++)
    {
        if(d[i]!=vegtelen)
            out<<d[i]<<' ';
        else out<<"0 ";
    }
}

void beolvas()
{
    ifstream in("dijkstra.in");
    in>>csucsok>>elek;
    int a,b,c;
    while(in>>a>>b>>c)
    {
        //beolvas
        graf[a].push_back(make_pair(b,c));
        //graf[b].push_back(make_pair(a,c));
    }
}
void dijkstra(int csucs)
{
    for(int i=1;i<=csucsok;i++)
        d[i]=vegtelen;

    d[csucs]=0;
    sor.push(csucs);
    jart[csucs]=1;

    while(!sor.empty())
    {
        int aktualiscsucs = sor.top();
        sor.pop();
        jart[aktualiscsucs]=0;
        for(size_t i=0;i<graf[aktualiscsucs].size();i++)
        {
            int szomszedcsucs = graf[aktualiscsucs][i].first;
            int suly = graf[aktualiscsucs][i].second;

            if(d[aktualiscsucs]+suly<d[szomszedcsucs])
            {
                d[szomszedcsucs]=d[aktualiscsucs]+suly;
                if(jart[szomszedcsucs]==0)
                {
                    jart[szomszedcsucs]=1;
                    sor.push(szomszedcsucs);
                }
            }
        }
    }
}
int main()
{
        beolvas();
        dijkstra(1);
        kiir();

    return 0;
}