Pagini recente » Cod sursa (job #2356228) | Cod sursa (job #16601) | Cod sursa (job #278088) | Rating agapevladutgabriel (vagape) | Cod sursa (job #572374)
Cod sursa(job #572374)
#include<fstream.h>
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,viz[50005],k,a,b,c,cost[50005],min;
struct nod
{ int nr;
int c;
nod *urm;
} *v[50005],*p;
void adaug(int a, int b, int c)
{ nod *p;
p=new nod;
p->nr=b;
p->c=c;
p->urm=v[a];
v[a]=p;
}
void afis()
{ int i;
for(i=2;i<=n;i++) g<<cost[i]<<' ';
g<<'\n';
/*for(i=1;i<=n;i++) g<<inainte[i]<<' ';
g<<'\n';*/
}
void dijkstra(int i)
{ int j,q;
//for(j=1;j<=n;j++) inainte[j]=i;
//inainte[i]=0;
viz[i]=1;
p=v[i];
while(p) cost[p->nr]=p->c, p=p->urm;
for(j=2;j<n;j++)
{ min=1;
while(viz[min]||!cost[min]) min++;
for(q=min+1;q<=n;q++)
if(!viz[q]&&cost[q]&&cost[q]<cost[min]) min=q;
viz[min]=1;
p=v[min];
while(p)
{ if((!cost[p->nr]||cost[p->nr]>cost[min]+p->c)&&!viz[p->nr])
cost[p->nr]=cost[min]+p->c/*,inainte[p->nr]=min*/;
p=p->urm;
}
}
afis();
}
int main()
{ int i;
f>>n>>m;
for(i=1;i<=m;i++)
{ f>>a>>b>>c;
adaug(a,b,c);
//adaug(b,a,c);
}
dijkstra(1);
f.close(); g.close();
return 0;
}