Pagini recente » Cod sursa (job #2731596) | Cod sursa (job #456272) | Cod sursa (job #1394110) | Cod sursa (job #2410268) | Cod sursa (job #2303499)
#include <stdio.h>
#include <string.h>
#define NMAX 50000
#define MMAX 250000
static int adj_list[NMAX+1], d[NMAX+1], ch[2*MMAX];
static struct edge {
int u, v, w, n;
} edges[MMAX+1];
int main(void)
{
int n, i, m, j, cht, chh;
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", &edges[i].u, &edges[i].v, &edges[i].w);
edges[i].n = adj_list[edges[i].u];
adj_list[edges[i].u] = i;
}
memset(d, 0x7F, sizeof d);
cht = chh = 0;
d[1] = 0;
ch[cht++] = 1;
while (chh < cht) {
for (j = adj_list[ch[chh]]; j != 0; j = edges[j].n) {
if (edges[j].w + d[edges[j].u] < d[edges[j].v]) {
d[edges[j].v] = edges[j].w + d[edges[j].u];
ch[cht++] = edges[j].v;
}
}
chh++;
}
for (i = 2; i <= n; i++) {
printf("%d%c", d[i] == 0x7F7F7F7F ? 0 : d[i], " \n"[i == n]);
}
return 0;
}