图论之最短路径 Floyd算法
/** 图论之最短路径 Floyd算法 */ #include<stdio.h> #include<string.h> #include<algorithm> #define INF 0x3f3f3f int g[100][100]; void Floyd(int n) { for(int k=0;k<n;k++) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(g[i][k] + g[k][j] < g[i][j])//更新值 { g[i][j] = g[i][k] + g[k][j]; } } } } } int main () { int n, m; scanf("%d%d",&n,&m); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { g[i][j] = INF; if(i == j) { g[i][j] = 0; } } } while(m--) { int a,b,c; scanf("%d%d%d",&a,&b,&c); g[a][b] = c; g[b][a] = c; } int start, terminal;//输入起点和终点 scanf("%d%d",&start, &terminal); Floyd(n); printf("%d\n",g[start][terminal]); return 0; } /** 4 5 0 1 1 1 3 2 0 3 4 0 2 2 2 3 1 0 3 输出3 */
本文来自博客园,作者:永恒&,转载请注明原文链接:https://www.cnblogs.com/Sun-yuan/p/14502388.html