• 2018年8月14号(回顾spfa)


      说实话,我之前没有认真的spfa,现在后悔不以,特别是今天考了三题的图论,多要用到spfa,我肯定是懵逼地看题发呆;没有办法,知得晚上晚自习时写篇论文来回顾一下。

      Bellman-ford大家应该都知道,其实spfa就在中国是这样叫的,在国外他们是叫“队列优化的Bellman-Ford算法”,管他的,还是先理解算法;

      先建一个先进先出的队列来保存待优化的节点(这是啥意识?反正书上是这样讲的),优化时每次取出队列节点u,并用找到u这个值来更新过其他点,对u点所指向的的节点v做松弛操作,如果v点的最短路估计值有所调整,且v点不在当前的队列中,就将v点插入队尾。这样不断从队列去出节点进行松弛操作,直到队列为空;

      spfa算法同时可以很容易判断负环,其实只要一个计数器计算摸个点弹出超过n-1就可以判断他有负环了(这个还是so easy);

     1 void spfa()
     2 {
     3     memset(d,127,sizeof(d));
     4     memset(v,0,sizeof(v));//标记是否在队列里 
     5     d[1]=0;v[1]=1;
     6     q.push(1);
     7     while(q.size())
     8     {
     9         int x=q.front();q.pop();//取出队头 
    10         v[x]=0;
    11         for(int i=head[x];i;i=Next[i]);//扫描所有出边 
    12         {
    13             int y=ver[i],z=edge[i];
    14             if(d[y]>d[x]+z)
    15             {
    16                 d[y]=d[x]+z;
    17                 if(!v[y])//更新将v入队 
    18                 q.push(y),v[y]=1;
    19             }
    20         }
    21     }
    22 }

    over !

  • 相关阅读:
    【译】高级指南-深入JSX
    记一次MongoDB裸奔
    CORS详解
    如何用Node编写命令行工具
    JSONP详解
    Web API接口之Geolocation
    认识AMD、CMD、UMD、CommonJS
    javascript之反柯里化(uncurrying)
    webpack3.0之loader配置及编写(一)
    小程序图形验证码前端实现
  • 原文地址:https://www.cnblogs.com/zssmg/p/9478185.html
Copyright © 2020-2023  润新知