不同提升图的权重相同

Same weights for different boost graphs

本文关键字:权重      更新时间:2023-10-16

我刚刚意识到我还不明白如何使用提升图库。我有这个代码:

#include <iostream>
#include <boost/graph/adjacency_list.hpp>
using namespace std;
using namespace boost;
typedef unsigned int WeightType;
typedef adjacency_list<listS, vecS, bidirectionalS,
        no_property, property<edge_weight_t, WeightType>> Graph;
typedef graph_traits<Graph>::vertex_descriptor Vertex;
typedef graph_traits<Graph>::edge_descriptor Edge;
typedef property_map<Graph, edge_weight_t>::type WeightMap;
typedef property_map<Graph, edge_weight_t>::const_type ConstWeightMap;
const WeightType infinity = numeric_limits<WeightType>::max();
int main() {
    Graph g(4);
    Graph g2(4);
    for (uint i = 0; i < 3; ++i) {
        add_edge(i, i+1, i, g);
        add_edge(i, i+1, i*10, g2);
    }
    WeightMap m = get(edge_weight, g);
    WeightMap m2 = get(edge_weight, g2);
    for (auto e : make_iterator_range(edges(g))) {
        cout << m[e] << endl;
    }
    cout << endl;
    for (auto e : make_iterator_range(edges(g))) {
        cout << m2[e] << endl;
    }
}

我希望输出如下:"0 1 2 , 0 10 20"。但输出是"0 1 2, 0 1 2"。每个图都有其权重属性图,不是吗?我的错误在哪里?

你在第二个 for 循环中打错了字:

for (auto e : make_iterator_range(edges(g))) {

应该是:

for (auto e : make_iterator_range(edges(g2))) {

因此,您将第一个图表的内容打印了两次,而不是第一个,然后是第二个。