我刚才意识到我还没有理解如何使用boost图库。我有这段代码:
#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”。每个图都有它的权重属性图,不是吗?我的错误在哪里?
答案 0 :(得分:2)
你在第二个for循环中输了一个拼写错误:
for (auto e : make_iterator_range(edges(g))) {
应该是:
for (auto e : make_iterator_range(edges(g2))) {
所以你要打印第一张图的内容两次,而不是第一次,然后是第二次。