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 }
  • 相关阅读:
    c++关于map的find和count的使用
    leetcode Two Sum
    leetcode Group Anagrams
    机器学习常见算法分类汇总
    KD树
    偏差与方差(未完)
    线性模型
    决策树
    Linux服务器配置---ftp用户黑名单
    Linux基础命令---mkdir
  • 原文地址:https://www.cnblogs.com/tmzbot/p/3895871.html
Copyright © 2011-2022 走看看