代码及解释
#include <iostream>
#include <cstring>
const int SIZE = 110;
unsigned int G[SIZE][SIZE];
int N,M;
void Floyd() {
for(int k = 0; k < N; ++k)
for(int i = 0; i < N; ++i)
for(int j = 0; j < N; ++j)
G[i][j]= std::min(G[i][j], G[i][k] + G[k][j]);
}
int main() {
while(std::cin >> N >> M && N + M) {
memset(G, -1, sizeof(G));
for(int i = 0; i < N; ++i)
G[i][i] = 0;
int x,y;
for(int i = 0; i < M; ++i) {
std::cin >> x >> y >> G[y][x];
G[x][y] = G[y][x];
}
Floyd();
std::cout << G[0][N - 1] << std::endl;
}
return 0;
}