#include <iostream>
#include <algorithm>
using namespace std;
const int N = 210;
const int INF = 0x3f3f3f3f;
int Graph[N][N];//邻接矩阵存储图
int n,m;//n个节点 m条边
/*Floyd是用来求多源汇最短路的 基于动态规划*/
void Floyd()
{
for(int k = 1; k <= n; k++)
{
for(int i = 1; i <= n; i++)
{
if(INF != Graph[i][k])
{
for(int j = 1; j <= n; j++)
{
Graph[i][j] =
min(Graph[i][j], Graph[i][k] + Graph[k][j]);
}
}
}
}
}
int main(int argc, char** argv)
{
scanf("%d%d",&n, &m);
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
if(i != j)
{
//有向图
Graph[i][j] = INF;
}
else
{
//此题不存在负的自环
Graph[i][j] = 0;
}
}
}
//读取m条边
while(m--)
{
int i,j,w;
scanf("%d%d%d",&i, &j, &w);
//可能存在重边 记录最小的那个边
Graph[i][j] = min(Graph[i][j],w);
}
Floyd();
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
printf("%d ",Graph[i][j]);
}
printf("\n");
}
return 0;
}
Floyd算法 求多源汇最短路
最新推荐文章于 2025-02-08 18:33:44 发布
这篇博客介绍了如何运用Floyd算法解决图的多源最短路径问题。代码示例展示了如何初始化邻接矩阵,读取边的权重,并通过动态规划更新最短路径。最终,程序会打印出每对顶点之间的最短距离。
756

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



