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;
    }
  • 相关阅读:
    解析网页源码方式
    vue踩坑--细节决定成败
    fallowing-travelvue
    学会不怕
    eslint代码规范检测
    三次握手+四次挥手
    小白的学习笔记
    es6数组
    css知识整理
    JavaScript之事件循环,宏任务与微任务
  • 原文地址:https://www.cnblogs.com/td15980891505/p/5380803.html
Copyright © 2011-2022 走看看