#include<bits/stdc++.h>
using namespace std;
int v,e,d[100][100]; //点数,边数,两点间距离
int main(){
//距离数组初始化
for(int i=0;i<100;i++) //起点
for(int j=0;j<100;j++) //终点
if(i==j)d[i][j]=0; //到自己距离0
else d[i][j]=10000; //距离最大化
cin>>v,e; //输入点数,边数
for(int i=0;i<v;i++){ //逐个
int a,b,c;cin>>a>>b>>c; //读入三个值
d[a][b]=c; //由A点到B点距离为C
}
//计算任意两点间最短路
for(int k=0;k<v;k++) //中间点
for(int i=0;i<v;i++) //起点
for(int j=0;j<v;j++) //终点
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);//自更新
//输出最短距离数组
for(int i=0;i<v;i++){ //起点
for(int j=0;j<v;j++) //终点
cout<<d[i][j]<<' '; //距离
cout<<endl; //换行
}
return 0;
}
/***
Floyd多源最短路
证明:对某对ij,中间有几个k就要几轮得出,证完
***/
4图-6多源最短路Floyd
最新推荐文章于 2023-08-04 16:06:13 发布