2

boost::graph次のように定義すると、すべてのエッジのエッジインデックスがゼロになります。なんで?私は何が間違っているのですか?

#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

1 に答える 1

4

adjacency_listには、エッジインデックスが関連付けられておらず、頂点インデックスのみが関連付けられています。グラフがどのように保存されるかを考えると、これは非常に論理的です。

エッジインデックスを作成するには、それをグラフの説明に手動で追加してから、手動で処理する必要があります。

于 2011-09-02T12:11:27.510 に答える