#include <iostream> #include <bits/stdc++.h> #define inf 100000000; using namespace std; void floyd(int mmap[][1200],int n,int m) { int a,b,c,i,j,k; //初始化 for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { if(i==j) { mmap[i][j]=0;//自己到自己距离为0 } else { mmap[i][j]=inf;//其他还未联通的点默认为无穷大 } } } for(i=1; i<=m; i++) { scanf("%d %d %d",&a,&b,&c); if(mmap[a][b]>c)//避免出现一路多权 { mmap[a][b]=c; mmap[b][a]=c;//此处为无向图 } } //floyd核心代码 for(k=1; k<=n; k++) { for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { if(mmap[i][j]>mmap[i][k]+mmap[k][j]) { mmap[i][j]=mmap[i][k]+mmap[k][j]; } } } } scanf("%d %d",&a,&b); printf("%d\n",mmap[a][b]);//输出任意两节点间的最短路 } int main() { int n,m,mmap[1200][1200]; while(scanf("%d %d",&n,&m)!=EOF) { floyd(mmap,n,m); } return 0; }
文章来源: 最短路-floyd