#include "stdafx.h"
//Floyd-Warshall算法
//可爱的Floyd算法虽然时间复杂度大了点,到了O(N^3)但对于日益增长的CPU来说又算得了什么呢,
//这么简洁的代码,真是太好记了就三个for循环而已.比起Prim kruskal来说真是天堂.
void main()
{
const size_t MaxVertex = 5;
const size_t MX = INT_MAX;
size_t MatrixG[MaxVertex][MaxVertex] =
{
0, 5, 2, 6, MX,
5, 0, MX, MX, 9,
2, MX, 0, 1, 3,
6, MX, 1, 0, MX,
MX, 9, 3, MX, 0
};
size_t Distance[MaxVertex][MaxVertex];
for(size_t i=0;i<MaxVertex;i++)
for(size_t j=0;j<MaxVertex;j++)
Distance[i][j] = MatrixG[i][j];
for(size_t k=0;k<MaxVertex;k++)
for(size_t i=0;i<MaxVertex;i++)
for(size_t j=0;j<MaxVertex;j++)
if(Distance[i][j] > MatrixG[i][k]+MatrixG[k][j])
Distance[i][j] = MatrixG[i][k]+MatrixG[k][j];
for(size_t i=0;i<MaxVertex;i++)
for(size_t j=0;j<MaxVertex;j++)
printf("Shortest distance between <%d,%d>: %d /n",i,j,Distance[i][j]);
getchar();
getchar();
}
本文介绍了一种用于寻找所有顶点对之间的最短路径的Floyd-Warshall算法。该算法通过三个嵌套的for循环实现,简洁且易于理解。文章提供了完整的C++代码示例,并展示了如何初始化距离矩阵并更新它以找到任意两点间的最短路径。

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



