Pagini recente » Cod sursa (job #1101775) | Cod sursa (job #696974) | Cod sursa (job #2706847) | Cod sursa (job #1635237) | Cod sursa (job #146098)
Cod sursa(job #146098)
#include <stdio.h>
#define NMAX 50001
#define INF 1 << 26
struct nod
{
int v, cost;
nod *next;
};
nod *m[NMAX];
int N, M, viz[NMAX], s[NMAX];
void adaug(int x, int y, int c)
{
nod *aux;
if ( m[x] == NULL)
{
m[x] = new nod;
m[x] -> v = y;
m[x] -> cost = c;
m[x] -> next = NULL;
}
else
{
aux = new nod;
aux -> v = y;
aux -> cost = c;
aux -> next = m[x];
m[x] = aux;
}
}
int main()
{
int i, x, y, c, poz, j, min;
nod *p;
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d %d", &N, &M);
for ( i = 1; i <= M; i++)
{
scanf("%d %d %d", &x, &y, &c);
adaug(x, y, c);
}
for ( i = 1; i <= N; i++)
s[i] = INF;
for ( p = m[1]; p; p = p -> next)
s[ p -> v ] = p -> cost;
s[1] = 0;
viz[1] = 1;
for ( i = 1; i < N; i++)
{
min = INF;
for ( j = 1; j <= N; j++)
if ( !viz[j] && s[j] < min)
{
min = s[j];
poz = j;
}
viz[poz] = 1;
for ( p = m[poz]; p ; p = p -> next)
if ( !viz[ p -> v] && p -> cost + min < s[ p -> v] )
s[ p -> v ] = p-> cost + min;
}
for ( i = 2; i <= N; i++)
if ( s[i] == INF)
printf("0 ");
else
printf("%d ", s[i]);
return 0;
}