Cod sursa(job #729900)

Utilizator mariacMaria Constantin mariac Data 30 martie 2012 20:02:33
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
using namespace std;
ifstream fin("djikstra.in");
ofstream fout("djikstra.out");

struct nod{int inf;int cost;nod *next;};
typedef nod *lista;
int d[50001];
lista lv[50001],aux;
bool cmp(int a,int b){return (d[a]>d[b]);}
int main()
{
memset(d,1000000,sizeof(d));
int n,m,x,y,z,i;
fin>>n>>m;
for(i=1;i<=n;i++)lv[i]=NULL;
for(i=1;i<=m;i++)
   {fin>>x>>y>>z;
   aux=new nod;
   aux->inf=x;
   aux->next=lv[y];
   aux->cost=z;
   lv[y]=aux;
   aux=new nod;
   aux->inf=y;
   aux->next=lv[x];
   aux->cost=z;
   lv[x]=aux;}
for(aux=lv[1];aux;aux=aux->next)d[aux->inf]=aux->cost;
int v[50001];
for(i=1;i<=n;i++)v[i]=i;
int nr;
nr=n;
make_heap(v+1,v+n+1,cmp);

for(i=1;i<n;i++)
    {for(aux=lv[v[1]];aux;aux=aux->next)
        if(d[v[1]]+aux->cost<d[aux->inf])d[aux->inf]=d[v[1]]+aux->cost;
     pop_heap(v+1,v+nr+1);
     nr--;
     sort_heap(v+1,v+nr+1,cmp);
     }
for(i=2;i<=n;i++)fout<<d[i]<<" ";
return 0;}