Cod sursa(job #2668029)

Utilizator SmitOanea Smit Andrei Smit Data 4 noiembrie 2020 12:57:58
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <bits/stdc++.h>

using namespace std;

struct Nod
{
    int nod,cost;
    /*bool operator < (const Nod& e)
const
    {
        return cost>e.cost;
    }*/
};

int n,m,d[50003];
vector<Nod>L[50003];

inline void Citire()
{
    int i,x,y,c;
    Nod w;
    ifstream fin("dijkstra.in");
    fin>>n>>m;
    for(i=1;i<=m;++i)
    {
        fin>>x>>y>>c;
        w.nod=y;
        w.cost=c;
        L[x].push_back(w);
    }
    fin.close();
}

inline void Dijkstra()
{
    //priority_queue<Nod>q;
    queue<Nod>q;
    Nod w,w1;
    int i,j,c;
    unsigned int k;
    for(i=2;i<=n;++i)   d[i]=1000000000;
    d[1]=0;
    w.nod=1;
    w.cost=0;
    q.push(w);
    while(!q.empty())
    {
        //w=q.top();
        w=q.front();
        q.pop();
        i=w.nod;
        for(k=0;k<L[i].size();++k)
        {
            j=L[i][k].nod;
            c=L[i][k].cost;
            if(d[j]>d[i] + c)
            {
                d[j]=d[i]+c;
                w1.nod=j;
                w1.cost=1000000000;//d[j];///??
                q.push(w1);
            }
        }
    }
}

inline void Afisare()
{
    int i;
    ofstream fout("dijkstra.out");
    for(i=2;i<=n;++i)
        if(d[i]==1000000000)    fout<<"0 ";
        else    fout<<d[i]<<" ";
    fout<<"\n";
}

int main()
{
    Citire();
    Dijkstra();
    Afisare();
    return 0;
}