zoukankan      html  css  js  c++  java
  • SPFA算法心得

    SPFA算法是改进后的Bellman-Ford算法,只是速度更快,而且作为一个算法,它更容易理解和编写,甚至比Dijkstra和B-F更易读(当然,Floyd是另一回事了,再也没有比Floyd还好写的最短路算法了,动规中这么简洁的也少见).

    详细说说SPFA

    SPFA,即Shortest Path Faster Algorithm.

    SPFA算法的核心很简单:

    #设Dist[j]为当前原点(S点)到j点的最短路
        #(我会尽量避免"松弛"这个半懂不懂的词)
    #在初始状态下Dist[S]=0,
    #Dist[i](i in G<V,E>.E not S)=Infinity
        #(这里可以随便设置一个值)
    #记Front[i]为最短路中i的前驱节点,即
    #通向i的节点,初始值Front[i]=0
        # -> ( i in G<V,E>.E )
    #维护队列保持求解中的点
    #Queue<Array,head,tail>::__queue
    #(为了判断负权圈,维护一个访问数组Access[i])
        #(表示i被加入队列过几次)
    #Queue中加入S
    while(!Queue.empty){
        a=Queue.head
        for b in FrontList[a].list.iterator(@to) {
            if(Dist[u]+FrontList[a].lengthTo(b)<Dist[b]){
                Dist[b]=Dist[u]+FrontList[a].lengthTo(b)
    if(!Inqueue.find b){
    Inqueue.push b
    Queue.push b
    Access[b]++
    if(Access[b]>nFrontList.pointsCount){
                      puts "Invalid graph with Nagetive weight loop"
                      exit(0)
                  }
    }
    } } Queue.popHead }
  • 相关阅读:
    poj 1456 贪心+STL
    hdu 4283 区间dp
    hdu 4745 区间dp
    hdu 3652 数位dp
    poj 2955 区间dp
    ubuntu apache2配置详解(含虚拟主机配置方法)
    从 mysql 客户端导出数据库 mysqldump
    Git 版本回退问题详解
    SEO 外链 内链 的定义
    为项目编写Readme.MD文件
  • 原文地址:https://www.cnblogs.com/tmzbot/p/3895871.html
Copyright © 2011-2022 走看看