---------------------------floyd算法 //与SPFA用法相同
#include <iostream>
#include <string>
using namespace std;
const int N =101;
int g[N][N];
void floyd(int n){
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
}
}
}
}
int main(){
memset(g,0x3f,sizeof(g));
for(int i=0;i<=N;i++){
g[i][i]=0;
}
int n,m;
int u,v,w;
cin>>n>>m;
while(m--){
cin>>u>>v>>w;
g[u][v]=g[v][u] =w;
}
floyd(n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<g[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
---------------------------
该程序使用C++实现了弗洛伊德算法,用于找到图中所有顶点之间的最短路径。通过初始化全连接图并设置边权重,然后进行k步迭代更新最短路径,最终输出矩阵形式的最短路径距离。
3万+

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



