Floyd-Warshall算法,简称Floyd算法
该算法用于求解任意两点间的最短距离,时间复杂度为O(n^3)。 通常可以在任何图中使用,包括有向图、带负权边的图。
Floyd算法求得两点间的最短距离,需要借助邻接矩阵来存储边信息,通过每条路径的最佳子路径来得到两点的最短路径。
注:即使是单边路径,也并非其他路径的最佳子路径。
准备
我们采用下面这个有向图来解释该算法:
我们首先采用一个Map数组作为邻接矩阵,存入边信息:
#define INF 32767 //将不通的路径权值设置为INF
int Map[2000][2000]; //方便观赏直接定义大小 使用时可以采用动态扩容
//初始化传入点数即可
void initMap(int n) {
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) {
if (i == j) Map[i][j] = 0;