Cod sursa(job #2369064)

Utilizator CarmenRo33Anghel Ionela Carmen CarmenRo33 Data 5 martie 2019 20:55:47
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>

using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

const int oo=(1<<31)-1;
#define lim 50005

int N,M,D[lim];
bool incoada[lim];
vector <pair <int,int> >G[lim];

struct compara
{
    bool operator()(int a,int b)
    {
        return D[a]<D[b];

    }
};

priority_queue <int, vector <int> , compara> coada;

void read()
{
    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));
        D[i]=oo;
    }
}

void look()
{
    for(int i=2;i<=N;i++)
     if(D[i]!=oo)
     fout<<D[i]<<" ";
     else fout<<"0 ";
}

void dijkstra(int nodstart)
{
    D[nodstart]=0;
    coada.push(nodstart);
    incoada[nodstart]=true;

    while(!coada.empty())
    {
        int nod;
        nod=coada.top();
        coada.pop();
        incoada[nod]=false;

        for(unsigned int i=0;i<G[nod].size();i++)
        {
            int vecin,cost;
            vecin=G[nod][i].first;
            cost=G[nod][i].second;
            if(D[vecin]>D[nod]+cost)
                D[vecin]=D[nod]+cost;
            if(incoada[vecin]==false)
            {
                coada.push(vecin);
                incoada[vecin]=true;
            }

        }

    }

}

int main()
{
    read();
    dijkstra(1);
    look();
    return 0;
}