SPFA算法求单源最短路径

SPFA算法是一种应用于有向图的单源最短路径算法,其时间复杂度优于Dijkstra算法,尤其适用于稀疏图。算法基于广度优先搜索,通过邻接表存储结构优化空间,并利用队列进行节点处理。在初始时,将源点入队,距离设为0,其他节点设为无穷大。每松弛一次节点,更新最短路径,并在未处理时将其入队。当队列为空,所有最短路径已找到。
摘要由CSDN通过智能技术生成

SPFA算法求单源最短路径

  • 算法简介:

    SPFA算法是应用于有向图上的一种算法,常用于求出从源点s到其它所有点的最短路径。相对于Dijkstra的O(n^2)的复杂度,SPFA的复杂度仅仅与边有关,为O(KE),其中E为该图的边数,且可以证明K < 2,故对于稀疏图来说,SPFA相较于Dijkstra要快上不少。

  • 算法思想:

    SPFA算法是基于广搜的思想实现它O(KE)的复杂度的。这里我用vector存放从每个点到其它点的可能路径,这种基于邻接表的思想相对于邻接矩阵省下了不少空间。最开始先将源点s放入队列,将表示点与源点之间的距离最小值的数组d[s]设为0,其余点的的距离设为inf,同时标记数组p[s]设为1。对于现在的节点的可能路径上能到达的每一个节点,我们进行relax松弛操作,对于每一次所能到达的节点更新最优值,同时当当前节点没有入队的时候,将它放入队列并做好标记。当队列为空的时候,则已经找到最优值,这时候统计d数组即为所求。

  • 代码实现:

    
    #include<iostream>  
    
    
    #include<cstdio>  
    
    
    #include<vector>  
    
    
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值