2011-09-02 3 views
2

boost::graph을 다음과 같이 정의하면 모든 에지에 대해 가장자리 인덱스가 0이됩니다. 왜? 내가 도대체 ​​뭘 잘못하고있는 겁니까?가장자리가 모두 0 인 edge_index?

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

int main() { 
    typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_index_t, std::size_t> > Graph; 
    typedef boost::graph_traits<Graph>::edge_descriptor Edge; 

    Graph g(3); 
    Edge e1 = boost::add_edge(0, 1, g).first; 
    Edge e2 = boost::add_edge(1, 2, g).first; 
    Edge e3 = boost::add_edge(2, 0, g).first; 

    boost::property_map<Graph, boost::edge_index_t>::type eim = boost::get(boost::edge_index, g); 
    size_t e1n = eim[e1], 
      e2n = eim[e2], 
      e3n = eim[e3]; 

    return 0; 
} 

설명서와 예제에서 알 수있는 한,이 방법이 효과적입니다.

답변

4

adjacency_list에 그것과 관련된 가장자리 인덱스 만 정점 인덱스가 없습니다. 그래프가 저장되는 방법에 대해 생각해 보면 매우 논리적입니다.

에지 인덱스를 수동으로 그래프 설명에 추가 한 다음 수동으로 처리해야합니다.

+0

[이 예제] (http://www.boost.org/doc/libs/1_46_1/libs/graph/doc/using_property_maps.html#sec:exterior-properties)를 보면, 그들은'adjacency_list'를 사용하고 있습니다. 가장자리 색인. 권리? 또는 나는 무엇인가 놓치고 있냐? – carlpett

+0

@carlpett, 그들이 add_edge (0, 1, 0, G)에서 수동으로 할당하는'property >를 알아 차려라. –

+0

Ah ... 고마워! – carlpett

관련 문제