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

bellman-ford模板

时间:2018-02-14 18:42:23      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:cto   inf   pop   log   pos   man   opera   als   memset   

题目大意:

最短路;

基本思路:

松弛;

代码如下:

struct Edge{
    int to,w;
    bool operator<(const Edge& rhs)const{
        return w>rhs.w;
    }
}edge[maxn];
vector<int>gra[maxn];
int dis[maxn],cnt[maxn];
bool vis[maxn];
bool bellman_ford(int s){
    queue<int>q;q.push(s);
    memset(vis,false,sizeof(vis));vis[s]=true;
    memset(cnt,0,sizeof(cnt));
    for(int i=0;i<n;i++) dis[i]=inf; dis[s]=0;
    while(!q.empty()){
        int u=q.front();q.pop();
        vis[u]=false;
        int sz=gra[u].size();
        for(int i=0;i<sz;i++){
            Edge& e=edge[gra[u][i]];
            if(dis[e.to]>dis[u]+e.w){
                dis[e.to]=dis[u]+e.w;
                if(!vis[e.to]){
                    q.push(e.to);
                    vis[e.to]=true;
                    cnt[e.to]++;
                    if(cnt[e.to]>n){
                        return false;
                    }
                }
            }
        }
    }
    return true;
}

  

bellman-ford模板

标签:cto   inf   pop   log   pos   man   opera   als   memset   

原文地址:https://www.cnblogs.com/imzscilovecode/p/8448640.html

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