专题四 · 1009

来源:互联网 发布:北京九五太维 知乎 编辑:程序博客网 时间:2024/05/29 05:52

代码及解释

#include <iostream>#include <cstring>// 简单的 Floyd// 初始化的一个技巧是用 unsigned int 然后初始化 -1// 更像是一个 trick// 还有一个是 INT_MAX 位于 limits.h// 更好的选择是// std::numeric_limits<decltype(G[0][0])>::max// 位于 limitsconst 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;}
0 0
原创粉丝点击