Cod sursa(job #2102634)

Utilizator TudorFinaruTudor Cristian Finaru TudorFinaru Data 9 ianuarie 2018 10:08:41
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include<list>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

struct nod{int y,c;}aux;

list<nod>v[50002];
list<nod>::iterator it;

int n,m,a,cost[50002];
bool viz[50002];

int main()
{
    int i,j,xo;
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>a>>aux.y>>aux.c;
        v[a].push_front(aux);

    }
    viz[1]=1;
    for(it=v[1].begin();it!=v[1].end();++it)
    cost[(*it).y]=(*it).c;

    for(i=1;i<=n-2;++i)
    { /// determin  xo cu viz[xo]=0, cost[xo]!=0 minim
        for(j=1;j<=n;j++)
          if(viz[j]==0 && cost[j]) {xo=j;break;}
        for(;j<=n;j++)
            if(viz[j]==0 && cost[j] && cost[j]<cost[xo]) xo=j;

        viz[xo]=1;

         for(it=v[xo].begin();it!=v[xo].end();++it)
             if(viz[(*it).y]==0 && (cost[(*it).y]==0 || cost[(*it).y]> cost[xo]+ (*it).c))
                   cost[(*it).y]=cost[xo]+ (*it).c;

    }
    for(i=2;i<=n;i++) g<<cost[i]<<' ';
    g<<'\n';
    f.close();
    g.close();
    return 0;
}