【问题标题】:Boost graph libraries: setting edge weight valuesBoost 图形库:设置边权重值
【发布时间】:2010-04-09 14:48:09
【问题描述】:

我正在研究 boost 图形库的使用,以便将它们应用于我想到的各种网络问题。

在我一直在查看的示例中,图形边缘值(“权重”)始终初始化为整数,例如在这些 Bellman-FordKruskal 算法中,例如:

int weights[] = { 1, 1, 2, 7, 3, 1, 1, 1 };

我的问题是,如果我尝试将权重更改为双倍,我会收到一堆关于转换等的警告消息,到目前为止我还无法弄清楚如何克服。

有没有人想办法解决这个问题?

【问题讨论】:

    标签: c++ boost-graph


    【解决方案1】:

    这是由weights[] 数组与您的提升图/算法用于边权重的类型不匹配引起的。

    在第一个链接示例中,例如,您还应该更改

    struct EdgeProperties {
      int weight;
    };
    [...]
    property_map<Graph, int EdgeProperties::*>::type 
    

    struct EdgeProperties {
      double weight;
    };
    [...]
    property_map<Graph, double EdgeProperties::*>::type 
    

    第二个

    typedef adjacency_list < vecS, vecS, undirectedS,
        no_property, property < edge_weight_t, int > > Graph;
    

    typedef adjacency_list < vecS, vecS, undirectedS,
        no_property, property < edge_weight_t, double > > Graph;
    

    【讨论】:

    • 您好,代码可以在这些链接中看到:bellman-example.cpp 和 kruskal-example.cpp
    • 您对第二个 (Kruskal) 的建议奏效了,干杯。我还不能完全克服贝尔曼的障碍。
    • 在 bellman 示例中,您还需要更改边缘属性映射的类型。捆绑属性是我最喜欢使用 BGL 的方式 (boost.org/doc/libs/1_42_0/libs/graph/doc/bundles.html)。
    猜你喜欢
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    相关资源
    最近更新 更多