Cod sursa(job #2206599)

Utilizator AnduRazvanMindrescu Andu AnduRazvan Data 23 mai 2018 02:43:31
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>
#define infinit 2000000000
#include <set>
using namespace std;
int n,m;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct nod
{
    int info;
    int cost;
    nod*urm;
}*g[50001];
void Addelem(nod *&prim,int info,int y)
{ nod *q=new nod;
  q->info=info;
  q->cost=y;
  q->urm=prim;
  prim=q;
}
int d[50001],viz[50001];
int main()
{ fin>>n>>m;
  int x,y,z;
  for(int i=1;i<=m;i++)
   {
     fin>>x>>y>>z;
     Addelem(g[x],y,z);
     Addelem(g[y],x,z);
   }

   for(int i=2;i<=n;i++)
d[i]=infinit;
d[1]=0;
set < pair<int,int> >Q;
Q.insert(make_pair(d[1],1));
for(int i=1;i<=n;i++)
{
    pair<int,int> p=(*(Q.begin()));
  Q.erase(Q.begin());
  x=p.first;
  y=p.second;
  viz[y]=1;
   for(nod*p=g[y];p!=NULL;p=p->urm)
   {
    if(viz[p->info]==0)
     if(p->cost+d[y]<d[p->info])
        { Q.erase({d[p->info],p->info});
            d[p->info]=p->cost+d[y];
          Q.insert(make_pair(d[p->info],p->info));
        }
   }
}
for(int i=2;i<=n;i++)
    fout<<d[i]<<" ";
    return 0;
}