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

    //Bellman-Ford 算法
    #include<iostream>
    using namespace std;
    #define MAX_SIZE 100
    #define MAX_NUMBER INT_MAX/2
    struct Edge {
        int u, v;      //表示有向边<u,v>
        int w;    //边的权重
    };
    Edge edge[MAX_SIZE];
    int dis[MAX_SIZE];
    int parent[MAX_SIZE];
    bool Bellman_Ford(int v, int e, int s);
    int main() {
        /*测试*/
        int i,v,e, s;
        cin >> v >> e;        
        for (i = 0; i<e; i++)
            cin >> edge[i].u >> edge[i].v >> edge[i].w;
        cin >> s;
        bool flag = Bellman_Ford(v, e, s);
        for (i = 0; i<v; i++)
            cout << dis[i] << " ";
        cout << endl;
        return 0;
    }
    void Relax(Edge edge) {
        if (dis[edge.v] > dis[edge.u] + edge.w) {
            dis[edge.v] = dis[edge.u] + edge.w;
            parent[edge.v] = edge.u;
        }
    }
    bool Bellman_Ford(int v,int e,int s) {
        int i,j;
        for (i = 0; i < v; i++)
            dis[i] = MAX_NUMBER;
        parent[s] = -1;           //s设置为根结点
        dis[s] = 0;
        for (i = 1; i < v; i++) {    
            for (i = 0; i < e; i++)
                Relax(edge[i]);         //对每条边做一次松弛操作  
        }
        for (i = 0; i < e; i++) {    //检验路径长度是否收敛(是否有负环存在)
            if (dis[edge[i].v]>dis[edge[i].u] + edge[i].w)
                return false;
        }
        return true;
    }
  • 相关阅读:
    排名第一、第二的OCR软件
    补码输出
    枚举 与 枚举的应用
    动态构造结构体数组
    c 冒泡排序
    strcpy
    typedef用法
    C 结构体小结
    int 占一个机器字长
    SQL Server创建视图——视图的作用
  • 原文地址:https://www.cnblogs.com/td15980891505/p/5380803.html
Copyright © 2011-2022 走看看