0
点赞
收藏
分享

微信扫一扫

图论 —— 多源最短路

多源最短路

相比较与单源最短路问题,多源最短路问题简单了很多。
多源最短路只有一个 Floyd 算法。
Floyd 算法其实是使用动态规划的思想实现的,核心是三重循环。

设定

n n n 表示图中顶点

数据定义

const LL INF=0x3f3f3f3f3f3f3f3f;
//d[i][j] 表示从顶点i到顶点j的最短路径
//初始值d,就是邻接矩阵中所有值的边
LL d[N][N];

初始化d

    for (LL i=1; i<=n; i++) {
        for (LL j=1; j<=n; j++) {
            if (i==j) {
                d[i][j]=0;
            } else {
                d[i][j]=INF;
            }
        }
    }

核心代码

void floyd() {
	for (LL k=1; k<=n; k++) {
		for (LL i=1; i<=n; i++) {
			for (LL j=1; j<=n; j++) {
				//从顶点i到顶点j,中途经过顶点k
				d[i][j]=min(d[i][j], d[i][k]+d[k][j];
			}
		}
	}
}

注意事项

  1. Floyd 算法可以处理负权,但是不能处理有负权回路环。
  2. 由于使用 INF 来初始化 d d d,而且图中可能出现负权边。我们需要使用 > = I N F / 2 >= INF/2 >=INF/2 来判断无通路。

时间复杂度

O ( n 3 ) O(n^3) O(n3)

模板题

http://47.110.135.197/problem.php?id=6392。

举报

相关推荐

0 条评论