2011-01-26 97 views
2

我试图遍历图的边缘并输出它们的边权重。我很困惑。我知道如何输出“边缘”,但这实际上只是一个(顶点,顶点),它定义了边缘。所以,我要将* edgePair.first索引到EdgeWeightMap中以获得从vertex * edgePair.first开始的边的权重?这不会编译:“不匹配运营商< <”。输出BGL边缘权重

#include <iostream> 
#include <boost/graph/graph_traits.hpp> 
#include <boost/graph/adjacency_list.hpp> 

typedef boost::property<boost::edge_weight_t, double> EdgeWeightProperty; 
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, EdgeWeightProperty> Graph; 

int main(int,char*[]) 
{ 
    // Create a graph object 
    Graph g(2); 

    EdgeWeightProperty e = 5; 
    add_edge(0, 1, e, g); 

    boost::property_map<Graph, boost::edge_weight_t>::type EdgeWeightMap = get(boost::edge_weight_t(), g); 

    typedef boost::graph_traits<Graph>::edge_iterator edge_iter; 
    std::pair<edge_iter, edge_iter> edgePair; 
    for(edgePair = edges(g); edgePair.first != edgePair.second; ++edgePair.first) 
    { 
     std::cout << EdgeWeightMap[*edgePair.first] << " "; 
    } 

    return 0; 
} 

有什么想法?

谢谢, 大卫

+0

请参阅:http://programmingexamples.net/index.php?title=简单的例子。 – 2011-01-27 18:53:31

回答

4

在这段代码,EdgeWeightProperty声明为顶点属性,而不是边缘属性,因此它没有意义插入与该属性的边缘。尝试在EdgeWeightProperty之前在adjacency_list typedef中添加boost::no_property。此外,您可能希望使用get(EdgeWeightMap, *edgePair.first)而不是operator[],因为这可以与更多属性映射类型一起使用。