来水一波Floyd
#include <bits/stdc++.h>
#define fr(i,n,m) for (int i=n;i<=m;i++)
using namespace std ;
int n,m,ans,a[100001],dis[111][111] ;
int main(){
scanf("%d%d",&n,&m) ;
fr (i,1,m) scanf("%d",&a[i]) ;
fr (i,1,n)fr (j,1,n) scanf("%d",&dis[i][j]) ;
fr(k,1,n) fr(i,1,n) fr(j,1,n)
if(i!=j&&i!=k&&j!=k && dis[i][j]>dis[i][k]+dis[k][j]) dis[i][j]=dis[i][k]+dis[k][j];
fr(i,2,m) ans+=dis[a[i-1]][a[i]] ;
printf("%d",ans) ;
}
本文介绍了一个使用Floyd算法解决最短路径问题的程序实例。通过三重循环更新节点间的距离,实现了任意两点间的最短路径计算。适用于了解和学习Floyd算法的基础与应用。

被折叠的 条评论
为什么被折叠?



