什么是图的最短路径?
就是给出两个带权图中的顶点,求出这个两个顶点之间权值或者说代价最小的路径。
算法思想
在图的最短路径问题上,相比于dijkstra算法求解单源最短路径,Floyd算法可以很好解决各个顶点之间的最短路径问题。个人总结:Floyd算法核心就是一种利用动态规划,求解问题,核心就是关于中转点的引入是否会引起最短路径变化展开思考
在之前,我们考虑最短路径问题时候,一般是从当前点出发,查看当前点的最短路径顶点,但是这个最短路径是对于相邻点,对于不相邻的点,最短路径会发生变化,变化的产生就是“中转点”的引入,在中转点的帮助下,两点的最短路径就会变化,这也是算法设计的初衷,就是探讨中转点引入带来的变化。
下面是实现算法的核心代码
void Floyd(MGraph &g) {
//初始化一个path矩阵
MGraph path = PreparePathGraph(g.vertex_number);
//遍历每一条边,开始比较在引入中转点之后的权值大小
for (int i = 0; i < g.vertex_number; i++)
{
for (int j = 0; j < g.vertex_number; j++)
{
for (int k = 0; k < g.vertex_number; k++)
{