Pagini recente » Cod sursa (job #525852) | Cod sursa (job #413714) | Cod sursa (job #2078186) | Cod sursa (job #2843743) | Cod sursa (job #505870)
Cod sursa(job #505870)
#include <iostream>
#include <stdio.h>
#define LGMAX 500001
#define INF 100000
using namespace std;
int n,m,viz[LGMAX],drum[LGMAX];
struct nod{
int inf,cost;
nod *urm;
};
nod *g[LGMAX];
void add (int x,int y,int z)
{
nod *aux=new nod;
aux->inf=y;
aux->cost=z;
aux->urm=g[x];
g[x]=aux;
}
void citire()
{
freopen ("dijkstra.in","r",stdin);
scanf ("%d%d",&n,&m);
int x,y,z;
for (int i=0;i<m;i++)
{
scanf ("%d%d%d",&x,&y,&z);
add (x,y,z);
}
}
void dr()
{
drum[1]=0;
for (int i=2;i<=n;i++)
drum[i]=INF;
for (nod *p=g[1];p;p=p->urm)
drum[p->inf]=p->cost;
for (int i=1;i<=n;i++)
{
int costm=INF,nodm;
for (int i=1;i<=n;i++)
if (drum[i]<costm && !viz[i])
costm=drum[i],nodm=i;
if (costm!=INF)
{
viz[nodm]=1;
for (nod *p=g[nodm];p;p=p->urm)
if (!viz[p->inf])
if (drum[p->inf]>costm+p->cost)
drum[p->inf]=costm+p->cost;
}
}
}
int main()
{
freopen ("dijkstra.out","w",stdout);
citire();
dr();
for (int i=2;i<=n;i++)
printf("%d ",drum[i]);
return 0;
}