Pagini recente » Cod sursa (job #1710077) | Cod sursa (job #2619832) | Cod sursa (job #1226103) | Cod sursa (job #352626) | Cod sursa (job #145284)
Cod sursa(job #145284)
#include <stdio.h>
#define in "dijkstra.in"
#define out "dijkstra.out"
#define NMAX 50010
#define _INF 9999999
typedef struct nod {
int vf,cost;
nod *next;
} *PNOD, NOD;
PNOD L[NMAX];
int SEL[NMAX], DIST[NMAX];
int N, M, minim, K;
void Add(int,int,int);
void Dijkstra();
int main()
{
freopen( in, "r", stdin );
freopen( out, "w", stdout );
scanf( "%d%d", &N, &M );
int X, Y, C;
for ( ; M > 0; --M )
{
scanf( "%d%d%d", &X, &Y, &C );
Add( X, Y, C );
DIST[X] = DIST[Y] = _INF;
}
int i;
Dijkstra();
for ( i = 2; i <= N; printf("%d ", DIST[i++]) );
return 0;
}
void Dijkstra()
{
int i, j, f;
DIST[1] = 0;
K = 0;
for ( f = 1; f <= N; ++f )
{
minim = _INF;
for ( i = 1; i <= N; ++i )
if ( DIST[i] < minim && !SEL[i] )
{
minim = DIST[i];
K = i;
}
SEL[K] = 1;
for ( PNOD q = L[K]; q; q = q->next )
if ( DIST[q->vf] > DIST[K] + q->cost )
DIST[q->vf] = DIST[K] + q->cost;
}
}
void Add( int i, int j, int c)
{
PNOD p = new NOD;
p->vf = j;
p->cost = c;
p->next = L[i];
L[i] = p;
}