加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

013--Floyd算法-动态规划-《算法设计技巧与分析》M.H.A学习笔记

发布时间:2020-12-13 21:10:36 所属栏目:PHP教程 来源:网络整理
导读:多源最短路:有向图,求从每一个顶点到其他所有顶点的最短距离。 基本思路: 假定有向图的所有点编号为 1 到 n , l[i,j] 表示从 i 到 j 的边的长度,如果不存在边,则置为正无穷。 定义 d(k,i,j) 表示从点 i 到点 j ,并且不经过编号大于 k 的点的最短距离

多源最短路:有向图,求从每一个顶点到其他所有顶点的最短距离。

 

基本思路:

假定有向图的所有点编号为1nl[i,j]表示从ij的边的长度,如果不存在边,则置为正无穷。

定义d(k,i,j)表示从点i到点j,并且不经过编号大于k的点的最短距离。

 

初始化条件:

K=0时,d(0,j)=l[i,j]

状态转移方程:

d(k,j)=min{ d(k⑴,j)d(k⑴,k)+d(k⑴,k,j) }   1<=k<=n

 

因而我们有以下的递归式:

 

 

算法分析:

明显,Floyd算法的时间复杂度是Θ(n3),空间复杂度是Θ(n2)

 

伪代码:

 


 

 

C++代码:

for( int k = 1; k <= n; ++k ) for( int i = 1; i <= n; ++i ) for( int j = 1; j <= n; ++j ) d[i][j]=min(d[i][j],d[i][k]+d[k][j]);


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读