Cod sursa(job #2861597)

Utilizator NagyBenceNagy Bence NagyBence Data 4 martie 2022 09:50:02
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.64 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>

using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout("dijkstra.out");
int oo=(1<<30);
int const
nmax=50005;
bool jart[nmax]={0};
int n,m;
int d[nmax];

vector <pair<int,int> > g[nmax];
struct compare
{
    bool operator()(int x,int y)
    {
        return d[x]>d[y];
    }
};
priority_queue<int,vector<int>, compare> Coada;
void beolvasas ()
{
    fin>>n>>m;
    for (int i=1;i<=m;i++)
    {
        int x,y,c;
        fin>>x>>y>>c;
        g[x].push_back(make_pair(y,c));
        g[y].push_back(make_pair(x,c));
    }
}
void kiir ()
{
    for (int i=2;i<=n;i++)
    {
        if (d[i]!=oo)
        {
            fout<<d[i]<<' ';
        }
        else fout<<"0 ";
    }
}
void dijkstra (int kezdoCsucs)
{
    for (int i=1;i<=n;i++)
    {
        d[i]=oo;
    }
    d[kezdoCsucs]=0;
    Coada.push(kezdoCsucs);
    jart[kezdoCsucs]=1;
    while (!Coada.empty())
    {
        int jelenlegiCsucs=Coada.top();
        Coada.pop();
        jart[jelenlegiCsucs]=0;
        for (int i=0;i< g[jelenlegiCsucs].size();i++)
        {
            int szomszed=g[jelenlegiCsucs][i].first;
            int suly=g[jelenlegiCsucs][i].second;
            if (d[jelenlegiCsucs]+suly<d[szomszed])
            {
                d[szomszed]=d[jelenlegiCsucs]+suly;
                if (!jart[szomszed])
                {
                    Coada.push(szomszed);
                    jart[szomszed]=1;
                }
            }
        }
    }
}
int main()
{
    beolvasas();
    dijkstra(1);
    kiir();
    return 0;
}