最短路问题

最短路问题

在图论里,从一个点到达另一个点的最短距离
分为单源最短路和多源最短路

求最短路的4个算法

算法 时间复杂度 类型 备注
Floyd算法 O((n^3)) 多源最短路 可以判断负圈
Dijkstra算法 O((n^2)) 单源最短路 可以堆优化或优先队列优化
Bellman-Ford算法 O((n*m)) 单源最短路
Spfa算法 单源最短路 Bellman-Ford算法的优化

优化算法
Dijkstra的队列优化

而最短路问题又有很多种,比如

  • 最小环
  • 哈密顿回路
  • 最小生成树

弗洛伊德算法Floyd

https://blog.csdn.net/Harington/article/details/81982299

定义g[i][j]表示i到j的最短路径,k是中介,i通过k到达j,指的是,只允许经过第k个结点

for(int k = 1; k <= n; k++){//中转点
    for(int i = 1; i <= n; i++){//起点
        for(int j = 1; j <= n; j++){//终点
            if(i == j || i == k || j == k) continue;
            if(dis[i][j] > dis[i][k] + dis[k][j]){
                dis[i][j] = dis[i][k] + dis[k][j];
            }
        }
    }
}

时间复杂度是O(n^3),对于大数据不合适,适合与n在100以内的数据

原文地址:https://www.cnblogs.com/Emcikem/p/11342307.html