zoukankan      html  css  js  c++  java
  • 挑战程序设计竞赛(第2版)第112页勘误

    整个代码段改为
    // 输入

    int N, ML, MD;
    int AL[MAX_ML], BL[MAX_ML], DL[MAX_ML];
    int AD[MAX_MD], BD[MAX_MD], DD[MAX_MD];
    
    int d[MAX_N]; //最短距离
    bool updated; // 是否有更新
    
    void update(int& x, int y) {
    if (x > y) {
    x = y;
    updated = true;
    }
    }
    
    // 用Bellman-Ford算法计算d
    void bellmanford() {
    for (int k = 0; k <= N; k++) {
    updated = false;
    // 从i+1到i的权值为0
    for (int i = 0; i + 1 < N; i++) {
    if (d[i + 1] < INF) update(d[i], d[i + 1]);
    }
    // 从AL到BL的权值为DL
    for (int i = 0; i < ML; i++) {
    if (d[AL[i] - 1] < INF) update(d[BL[i] - 1], d[AL[i] - 1] + DL[i]);
    }
    // 从BD到AD的权值为-DD
    for (int i = 0; i < MD; i++) {
    if (d[BD[i] - 1] < INF) update(d[AD[i] - 1], d[BD[i] - 1] - DD[i]);
    }
    }
    }
    
    void solve() {
    // 检查是否存在负圈
    fill(d, d + N, 0);
    bellmanford();
    if (updated) {
    printf("-1
    ");
    return;
    }
    
    fill(d, d + N, INF);
    d[0] = 0;
    bellmanford();
    int res = d[N - 1];
    if (res == INF) res = -2;
    printf("%d
    ", res);
    }
    
  • 相关阅读:
    CSS
    html5
    XHTML
    HTML
    git 教程 --git revert 命令
    Git 教程 --git merge 命令
    git 教程 --git reset 命令
    git 教程 --git cherry-pick 命令
    git 教程 --git stash命令
    git 教程 --git diff功能
  • 原文地址:https://www.cnblogs.com/orion7/p/8365666.html
Copyright © 2011-2022 走看看