最短路径Ⅲ—Floyd-Warshall算法
来源:互联网 发布:java 断点续传 编辑:程序博客网 时间:2024/05/17 08:59
Floyd-Warshall算法(Johnson算法暂时不介绍)
1.定义概览
Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。
2.算法描述
1)算法思想原理:
Floyd算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题,我们需要为这个目标重新做一个诠释(这个诠释正是动态规划最富创造力的精华所在)
从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。所以,我们假设Dis(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,我们检查Dis(i,k) + Dis(k,j) < Dis(i,j)是否成立,如果成立,证明从i到k再到j的路径比i直接到j的路径短,我们便设置Dis(i,j) = Dis(i,k) + Dis(k,j),这样一来,当我们遍历完所有节点k,Dis(i,j)中记录的便是i到j的最短路径的距离。
2).算法描述:
a.从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。
b.对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比己知的路径更短。如果是更新它。
3).Floyd算法过程矩阵的计算----十字交叉法(点击链接)
3.算法代码实现
typedef struct { char vertex[VertexNum]; //顶点表 int edges[VertexNum][VertexNum]; //邻接矩阵,可看做边表 int n,e; //图中当前的顶点数和边数 }MGraph; void Floyd(MGraph g){ int A[MAXV][MAXV]; int path[MAXV][MAXV]; int i,j,k,n=g.n; for(i=0;i<n;i++) for(j=0;j<n;j++) { A[i][j]=g.edges[i][j]; path[i][j]=-1; } for(k=0;k<n;k++) { for(i=0;i<n;i++) for(j=0;j<n;j++) if(A[i][j]>(A[i][k]+A[k][j])) { A[i][j]=A[i][k]+A[k][j]; path[i][j]=k; } } }
算法时间复杂度:O(n3)
- 最短路径Ⅲ—Floyd-Warshall算法
- PKU1125 最短路径 Floyd-Warshall算法
- Dijkstra/Floyd-Warshall 最短路径算法
- Floyd Warshall 弗洛伊德算法---最短路径
- 最短路径之Floyd—Warshall算法
- 最短路径之Dijkstra算法和Floyd-Warshall算法
- 每对顶点的最短路径 : Floyd-Warshall 算法
- 所有节点对最短路径-Floyd-Warshall算法
- 最短路径算法----Dijkstra Bellman-Ford Floyd-Warshall Johnson
- python解决最短路径问题:Floyd-Warshall算法
- 【算法】最短路径-弗洛伊德(Floyd-Warshall)
- 算法——所有节点对的最短路径:Floyd-Warshall算法、Johnson算法
- 最短路径算法—Floyd-Warshall算法分析与实现
- 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson,无一幸免
- 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson
- 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson
- 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson
- 最短路径(一)—Floyd-Warshall(只有五行的算法)
- 从缓冲上看阻塞与非阻塞在发送和接受上的区别
- class 样式的添加,删除,切换 【选择器】addClass,removeClass,toggleClass
- bzoj1641 [Usaco2007 Nov]Cow Hurdles 奶牛跨栏
- 高性能Mysql主从架构的复制原理及配置详解
- 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三
- 最短路径Ⅲ—Floyd-Warshall算法
- Oracle同义词创建及其作用
- Android UI 设计之 TextView EditText 组件属性方法最详细解析
- setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key
- 模拟按键
- [leetcode] Sort Colors
- Ubuntu init启动流程分析
- ORA-08104: this index object xxxxx is being online built or rebuilt
- HDU4893 Wow! Such Sequence! 多校练习赛 树状数组