Cod sursa(job #2420602)

Utilizator AndrulianDin Iulian Andrulian Data 12 mai 2019 19:50:07
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int nmax=50005;
const int INF=1<<30;
vector <int> d(nmax,INF);
bool viz[nmax];
int x,y,c;
struct node
{
    int nod,cost;
    node *urm;
};
node *a[nmax];
void new_node(int x,int y,int cost)
{
    node *q=new node;
    q->nod=y;
    q->cost=cost;
    q->urm=a[x];
    a[x]=q;
}
int main()
{
    int n,m;
    fin>>n>>m;
    while(fin>>x>>y>>c)
    {
        new_node(x,y,c);
        if(x==1)
            d[y]=c;
    }
    d[1]=0;
    viz[1]=1;
    bool ok=1;
    int poz;
    for(; ok; )
    {
        int pmin=INF;
        for(int i=1; i<=n; ++i)
        {
            if(!viz[i] && d[i]<pmin)
                pmin=d[i],poz=i;
        }
        if(pmin!=INF)
        {
            viz[poz]=1;
            node *q=a[poz];
            for(; q!=NULL ; q=q->urm)
            {
                if( d[q->nod]>d[poz]+q->cost)
                    d[q->nod]=d[poz]+q->cost;
            }
        }
        else
            ok=0;
    }
    for(int i=2; i<=n; ++i)
        if(d[i]!=INF)
            fout<<d[i]<<" ";
        else
            fout<<0<<" ";
}