最短路径(Floyd-Warshall算法)

主要思想:
图中的两个点之间是否能够经过其他1个或n个点来缩短他们之间的距离。
求m点到n点的最短距离:一开始先让1号点作为中转点,如果m点到1号点再到n点经过的路程比直接到n点经历的路程短,那么就可以先经过1号点在到n号点;这一步只是让1作为中转。那么依次将1到n号点都加进来,最后的最小值就是m到n的最短路程。

核心代码:

for (int k=1; k<=n; k++){//依次让1到n号点作为中转 
	for (int i=1; i<=n; i++){
		for (int j=1; j<=n; j++){
			if (e[i][j]>e[i][k]+e[k][j])//e[i][j]为i到j的最短路程 
				e[i][j]=e[i][k]+e[k][j];
		}
	}
} 

分析:
因为遍历了所有的点,所以这个算法适合稠密图。
可解决负边权
适合解决多源问题

你可能感兴趣的:(算法基础)