zoukankan      html  css  js  c++  java
  • Bellman-Ford 算法

    根据之前最短路径算法里提到的,我们只要放松所有边直到其全部失效就可以得到最短路径

    注意:图中不能有负圈。否则当负圈中某个点经过这个负圈的所有边的松弛操作后,这个点的的d[i]就会减小,此时会发现它可以通过这个负圈的松弛操作不断使它自身不断变小。对于存在负圈的图,最短路无意义 

     由于是有关边的算法,并且我们不需要关注边之间的关系,只需要放松所有边即可

    模板入下:

    struct edge {int from, to, cost};
    
    edge es[MAX_E]; //
    
    int d[MAX_V];
    int V, E;
    
    for (int i = 1; i <= V; i++) d[i] = INF;
    d[s] = 0;
    while (true) {
        bool update = false;
        for (int i = 1; i <= E; i++) {
            edge e = es[i];
            //d[e.from]=INF时距离为无穷大,没有意义 
            if (d[e.from]!=INF && d[e.to]>d[e.from]+e.cost]) {
                d[e.to] = d[e.from] + cost;
                update = true;
            }
        }
        if (!update) break;
    }
  • 相关阅读:
    Redis常见7种使用场景(PHP)
    阻塞式I/O实现简单TCP通信
    telnet客户端程序
    TCP简单回射程序
    getsockname和getpeername函数
    close函数
    TCP时间获取程序
    listen函数
    基本套接字编程
    readline.c
  • 原文地址:https://www.cnblogs.com/wizarderror/p/10902607.html
Copyright © 2011-2022 走看看