大家好,我是贤弟!
一、什么是Floyd-Warshall算法?
Floyd-Warshall算法是一种用于求解所有点对之间最短路径的动态规划算法,可以处理有向图或无向图中存在负权边和负环的情况。
Floyd-Warshall算法以矩阵作为数据结构,适用于小规模稠密图,时间复杂度为O(n^3n 3)。
二、Floyd-Warshall算法的原理
Floyd-Warshall算法的原理如下:
1、初始化矩阵,矩阵的每个元素表示从i到j的最短距离,如果i和j之间没有边,则距离赋值为无穷大;
2、依次枚举每一个顶点k,将顶点k加入中转点考虑,更新矩阵每个元素的值:如果通过中转点k可以得到更短的距离,则更新当前元素的距离值;
3、枚举所有的顶点k,重复执行步骤2,直到所有的顶点都被枚举过。
三、代码示例
Floyd-Warshall算法的C语言实现代码如下:
最后:
以上代码中,我们以一个4个顶点的图作为示例,输出了从任意一个顶点到其他顶点的最短距离矩阵。
输出结果如下:
从任意一点到其他点的最短距离为:
0 5 8 9
INF 0 3 4
INF INF 0 1
INF INF INF 0
领取专属 10元无门槛券
私享最新 技术干货