码迷,mamicode.com
首页 > 其他好文 > 详细

SPFA模板 Bellmanford优化版

时间:2018-06-05 13:21:54      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:ems   turn   color   memset   for   mem   empty   int   span   

SPFA模板:

queue<int>Q;
bool inq[510];
int dis[510],sumv[510];
int n,v[510*3],__next[510*3],e,w[510*3],first[510],cnts[510];
void AddEdge(int U,int V,int W) {
    v[++e]=V;
    w[e]=W;
    __next[e]=first[U];
    first[U]=e;
}

bool spfa(const int &s) {
    memset(dis,0x7f,sizeof(dis));
    dis[s]=0;
    Q.push(s);
    inq[s]=1;
    ++cnts[s];
    while(!Q.empty()) {
        int U=Q.front();
        for(int i=first[U]; i; i=__next[i])
            if(dis[v[i]]>dis[U]+w[i]) {
                dis[v[i]]=dis[U]+w[i];
                if(!inq[v[i]]) {
                    Q.push(v[i]);
                    inq[v[i]]=1;
                    ++cnts[v[i]];
                    if(cnts[v[i]]>n+1)
                        return 0;
                }
            }
        Q.pop();
        inq[U]=0;
    }
    return 1;
}

 

SPFA模板 Bellmanford优化版

标签:ems   turn   color   memset   for   mem   empty   int   span   

原文地址:https://www.cnblogs.com/zinyy/p/9139097.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!