spfa 有无负权环 负权边最短路 模板

来源:互联网 发布:网络传输介质有哪些 编辑:程序博客网 时间:2024/05/19 17:48

spfa 是利用队列优化的快速bellman-ford的算法,可以判断是否有负权环,如果没有的话可以求出来最短路。

const int maxn = 510;const int INF = 0x3fffffff;struct Node{    int e, w;    Node(int ne, int nw) : e(ne),w(nw){}    Node(){}};vector<vector<Node> > G;int updateTimes[maxn];//判断是否有环int dist[maxn];bool spfa(int v, int n){//输入源点, 节点个数    for(int i = 1; i <= n; ++i)        dist[i] = INF;    dist[v] = 0;    queue<int> q;  q.push(v);    memset(updateTimes ,0,sizeof(updateTimes));    while(!q.empty()){        int s = q.front();  q.pop();        for(int i = 0; i < G[s].size(); ++i) {            int e = G[s][i].e;            if(dist[e] > dist[s] + G[s][i].w){                dist[e] = dist[s] + G[s][i].w;                q.push(e);                ++updateTimes[e];                if(updateTimes[e] >= n)                    return true;            }        }    }    return false;}
1 0
原创粉丝点击