Floyd算法(所有点对最短路径)

Floyd算法是一种动态规划方法,用于找出图中所有点对之间的最短路径。它通过不断更新邻接矩阵来寻找可能的更短路径,且仅依赖上一阶段状态,适合空间优化。在初始化时,不相连的边权重设为无穷大,对角线元素设为0。代码实现后,输出了从v4到v3再到v2的最短路径。了解更多详情,可参考相关文章。
摘要由CSDN通过智能技术生成

Floyd算法(所有点对最短路径)就是每对可以联通的顶点之间总存在一个借助于其他顶点作为媒介而达到路径最短的最短路径值(这个值通过不断增添的媒介顶点而得到更新,也可能不更新——通过媒介的路径并不比其原路径更短),所有的值存储于邻接矩阵中。

典型的动归思想。

值得注意的是,Floyd算法本次的状态的获取只用到了上个阶段的状态,而没有用到其他阶段的状态,这就为压缩空间奠定了条件。

Floyd算法能够成功的关键之一就是D0(初始矩阵,即权重矩阵)的初始化,凡是不相连接的边必须其dij必须等于正无穷且dii=0(矩阵对角线上的元素!)

代码如下:

/*path[i][j]=k,说明 j 的前驱是 k */
void PrintShortestPath (int ** path , int i , int j )
{ 
    static int flag1 = 0 ;
    static int flag2 = 0 ;   //flag1和flag2是一次性买卖
    
    if (flag1 == 0 )         //首尾要单独输出,要不然输出的结点会重复
    { 
        cout << "The shortest path from v" << i + 1 << " to v" << j + 1 << " is: /n " ;
        cout << "v" << i +
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值