hdu 2544 赤裸裸的最短路

#include <stdio.h>
#define SIZE 100

int map[SIZE][SIZE];
int MAX = 0x7fffffff;
int N, M, i, j, k, c;
int S[SIZE];
int D[SIZE];

int dijistra() {
for (i = 0; i < N; i++) {
S[i]
= 0;
D[i]
= map[0][i];
}
S[
0] = 1;
D[
0] = 0;
int min;
for (i = 1; i < N; i++) {
min
= MAX;
int k = 0;
for (j = 0; j < N; j++) {
if (S[j] == 0 && D[j] < min) {
k
= j;
min
= D[j];
}
}
S[k]
= 1;
for (j = 0; j < N; j++) {
if (S[j] == 0 && (D[k] < D[j] - map[k][j])) {
D[j]
= D[k] + map[k][j];
}
}
}
return D[N - 1];
}

int main() {
while (scanf("%d%d", &N, &M) != EOF) {
if (N == 0 && M == 0) {
break;
}
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
map[i][j]
= MAX;
}
}
for (k = 0; k < M; k++) {
scanf(
"%d%d%d", &i, &j, &c);
map[i
- 1][j - 1] = map[j - 1][i - 1] = c;
}
printf(
"%d\n", dijistra());
}
return 0;
}
原文地址:https://www.cnblogs.com/moonbay/p/2110549.html