Pagini recente » Cod sursa (job #767072) | Cod sursa (job #633733) | Cod sursa (job #1715302) | Cod sursa (job #1749199) | Cod sursa (job #1967515)
#include <bits/stdc++.h>
#define INF (1<<29)
#define MAXN 50001
using namespace std;
struct Nod
{
int info, cost;
Nod *next;
};
Nod *L[MAXN], *p;
int n, m, x, y, cost, d[MAXN];
bool viz[MAXN];
void Add(int x, int y, int c)
{
p=new Nod;
p->info=y;
p->cost=c;
if(L[x]==NULL)
{
p->next=NULL;
L[x]=p;
}
else
{
p->next=L[x];
L[x]=p;
}
}
void Dijsktra(int nod)
{
int minim, k;
for(int i=2;i<=n;++i) d[i]=INF;
for(int i=1;i<=n;++i)
{
minim=INF;
for(int j=1;j<=n;++j)
if(!viz[j] && d[j]<minim)
{
minim=d[j];
k=j;
}
viz[k]=true;
for(Nod *p=L[k];p!=NULL;p=p->next)
if(d[k]+p->cost<d[p->info]) d[p->info]=d[k]+p->cost;
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d %d", &n, &m);
for(int i=1;i<=m;++i)
{
scanf("%d %d %d", &x, &y, &cost);
Add(x,y,cost);
}
Dijsktra(1);
for(int i=2;i<=n;i++)
if(d[i]==INF) printf("0 ");
else printf("%d ",d[i]);
return 0;
}