Cod sursa(job #2168114)

Utilizator andreizaicescuAndrei Zaicescu andreizaicescu Data 14 martie 2018 09:38:13
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>

using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int l[50001],k;
struct el{int nod; int urm; int dist;};
el a[250001];
void add(int x, int y, int c)
{
    k++;
    a[k].nod=y;
    a[k].urm=l[x];
    l[x]=k;
    a[k].dist=c;

}
bool viz[50001];
int lun[50001];

int main()
{

    int n,m,x,y,z,i,nod,j;
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>z;
        add(x,y,z);
    }
    for(i=1;i<=n;i++)
         lun[i]=99999999;
    viz[1]=1;
    int poz=l[1];
    while(poz!=0)
    {
        nod=a[poz].nod;
        if(lun[nod]>a[poz].dist)
            lun[nod]=a[poz].dist;
        poz=a[poz].urm;
    }
    for(i=2;i<=n;i++)
    {
        int mini=999999991;
        for(j=2;j<=n;j++)
            if(lun[j]<mini and viz[j]==0)
        {
            mini=lun[j];
            nod=j;
        }
        int nod2=nod;
        viz[nod]=1;
        poz=l[nod];
        while(poz!=0)
    {
        nod=a[poz].nod;
        if(lun[nod]>a[poz].dist+lun[nod2])
            lun[nod]=a[poz].dist+lun[nod2];
        poz=a[poz].urm;
    }

    }
    for(i=2;i<=n;i++)
        if(lun[i]!=99999999)
        g<<lun[i]<<" ";
    else
        g<<0<<" ";
    return 0;
}