任意两点之间的最短路径问题(Floyd-Warshall算法)
来源:互联网 发布:淘宝的降价通知 编辑:程序博客网 时间:2024/05/17 23:13
求解所有两点之间的最短路问题叫做任意两点之间的最短路问题。Floyd-Warshall算法考虑的是 一条最短路径上的中间结点。例如,简单路径p={v1,v2,...vl}上的中间结点指的是路径p上除了v1和 vl之外的任意节点,也就是处于集合{v2,v3,...vl-1}中的节点。Floyd-Warshall算法基于以下: 假定图G的所有顶点为V={1,2,3,...,n},考虑其中的一个子集{1,2,..,k},这里的K是小于n的整数。对于任意的节点i,j属于V,从i到j的所有中间结点都取自于集合{1,2,3,...,k}的路径,并设p为其中权重最小的路径,也就是说路径p是简单路径。Floyd-Warshall算法利用了路径p和从i到j之间中间结点取自集合{1,3,..,k-1}的最短路径之间的关系。该关系依赖于结点k是否是路径p上的一个中间节点。 (1)如果结点k不是路径p上的中间结点,则路径p上的所有中间结点都属于集合{1,2,...,k-1}.所以,从结点i到结点j的中间结点取自于结合{1,2,...,k}的一条最短路径。 (2)如果结点k是路径p上的中间结点,则路径p可以分解为i~k,k~j。通过以上分析,可以得出以下结论:记i到j的最短路径为d[i][j],那么具有以下递推公式:d[i][j]= d[i][j] 最短路径不通过k = min(d[i][j],d[i][k]+d[k][j]) 最短路径通过k可以不断的使用同一个公式进行更新 min(d[i][j],d[i][k]+d[k][j]) 以上算法使用DP策略,可以在O(|V|3)时间里求得所有两个结点之间的最短路径。
int d[MAX_V][MAX_V]; //d[u][v]表示边e=(u,v)的权值(不存在设为INF,d[i][i]=0)int V; //顶点数目void floyd_warshall(){ for(int k=0;k<V;k++){ for(int i=0;i<V;i++){ for(int j=0;j<V:j++){ d[i][j]=min(d[i][j],d[i][k]+d[k][j]); } } }}
0 0
- 任意两点之间的最短路径问题(Floyd-Warshall算法)
- 任意两点之间的最短路径问题(Floyd算法)--Java语言
- 任意两点的最短路问题 Floyd-Warshall算法
- floyd算法(求任意两点间的最短路径)
- Floyd算法(任意两点间的最短路径)
- POJ 2139-- 最短路径 (floyd算法,任意两点间的最短路径)
- AOJ GRL_1_C: All Pairs Shortest Path (Floyd-Warshall算法求任意两点间的最短路径)(Bellman-Ford算法判断负圈)
- 【算法】Floyd-Warshall算法(任意两点间的最短路问题)(判断负圈)
- Floyd-Warshall算法 (任意两点间的最短路问题)
- Floyd-Warshall算法---求解任意两节点的最短路径
- Dijkstra单源最短路径实现 及 Floyd任意两点之间的最短路径
- 【算法导论】【Floyd-Warshall 算法】每对节点之间的最短路径
- python解决最短路径问题:Floyd-Warshall算法
- 【动态规划】每对顶点之间的最短路径之Floyd-Warshall算法
- 所有顶点对之间的最短路径之Floyd-Warshall算法
- PKU1125 最短路径 Floyd-Warshall算法
- Dijkstra/Floyd-Warshall 最短路径算法
- Floyd Warshall 弗洛伊德算法---最短路径
- 创建要素的两种方法(多要素)
- java TCP/UDP编程
- 深度学习(卷积神经网络)一些问题总结
- C++ 内存对齐
- 安装ssh
- 任意两点之间的最短路径问题(Floyd-Warshall算法)
- 按照特定轨迹遍历字符串图
- Android添加第三方so到APK中
- 常用的命令、小技巧
- ScrollView反弹效果的实现
- 大道至简-小波
- 【bzoj1193】[HNOI2006]马步距离
- hdu 1102 Constructing Roads
- xcode 常用的快捷键