单源最短路 Bellman-Ford

Bellman-Ford可以检测负圈,有些时候还是很有必要。现在理解的不是很深,等以后再回来加以完善,先放一段代码。

struct edge{
    int from;
    int to;
    int cost;
};

edge es[MXAN];

int d[MXAN];
int V, E; // V是顶点数,E是边数

void shortest_path(int s){
    for(int i = 0; i < V; ++i)
        d[i] = INF;
    d[s] = 0; // s是出发点
    while(true){
        bool update = false;
        for(int i = 0; i < E; ++i){
            edge e = es[i];
            if(d[e.from] != INF && d[e.to] > d[e.from] + e.cost){
                d[e.to] = d[e.from] + e.cost;
                update = true;
            }
        }
        if(!update)
            break;
    }
}

bool find_negative_loop(){
    memset(d, 0, sizeof(d));
    for(int i = 0; i < V; ++i){
        for(int j = 0; j < E; ++j){
            edge e = es[j];
            if(d[e.to] > d[e.from] + e.cost){
                d[e.to] = d[e.from] + e.cost;
                if(i == V - 1)
                    return true;
            }
        }
    }
    return false;
}
    原文作者:Bellman - ford算法
    原文地址: https://blog.csdn.net/GoneWithTheWind_yin/article/details/59480227
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞