最短路径(Floyd-Warshall算法)

版权声明:本文为博主原创文章,欢迎转载。如有问题,欢迎指正。 https://blog.csdn.net/weixin_42172261/article/details/88598063

主要思想:
图中的两个点之间是否能够经过其他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];
		}
	}
} 

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

猜你喜欢

转载自blog.csdn.net/weixin_42172261/article/details/88598063