Cod sursa(job #2505146)

Utilizator Vasilescu_CosminVasilescu Cosmin Vasilescu_Cosmin Data 6 decembrie 2019 11:55:55
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in ("heapuri.in");
ofstream out ("heapuri.out");

const int NMax=50005;
const int oo=1<<30;

int n,m;
int D[NMax];
bool incoada[NMax];

struct Compara
{
    bool operator() (int x, int y)
    {
        return D[x]<D[y];
    }
};


vector <pair <int,int> > G[NMax];

priority_queue < int,vector<int>,Compara> Coada;

void Dijkstra(int nodStart)
{
    for(int i=1; i<=n; i++)
        D[i]=oo;
    D[nodStart]=0;
    Coada.push(nodStart);
    incoada[nodStart]=1;
    while(!Coada.empty())
    {
        int nodCurrent=Coada.top();
        Coada.pop();
        incoada[nodCurrent]=1;
        for(size_t i=0; i<G[nodCurrent].size(); i++)
        {
            int vecin=G[nodCurrent][i].first;
            int cost=G[nodCurrent][i].second;
            if(D[nodCurrent]+cost<D[vecin])
            {
                D[vecin]=D[nodCurrent]+cost;
                if(incoada[vecin]==0)
                {
                    Coada.push(vecin);
                    incoada[vecin]=1;
                }
            }
        }
    }
}

int main()
{
    int i,x,y,c;
    in>>n>>m;
    for(i=1; i<=m; i++)
    {
        in>>x>>y>>c;
        G[x].push_back(make_pair(y,c));
    }
    Dijkstra(1);
    for(i=2; i<=n; i++)
    {
        if(D[i]!=oo)
            out<<D[i]<<" ";
        else
            out<<0<<" ";
    }
    return 0;
}