私はBGLを初めて使っています。頂点を削除してグラフを実装しようと数日間壁に頭を突きつけていました。 this 1)私の一日を救った。BGL:listSとindex_mapの頂点
が今私のコードは、この方法(以下簡略化されたコード)で構成されています
struct NodeProperties
{
int32_t data;
};
typedef property<edge_weight_t, uint32_t> EdgeProperties;
typedef adjacency_list<listS, listS, bidirectionalS,
property<vertex_index_t, int, NodeProperties>,
EdgeProperties> Graph;
/* In the graph initialization function */
Graph graph;
/* many add_vertex() and add_edge() here */
/* Assign indices */
int i = 0;
BGL_FORALL_VERTICES(v, graph, Graph) {
get(vertex_index, graph)[v] = i++;
}
/* Make many manipulations, in particular, edge/vertex removal according
to certain criteria, NO add_vertex (though some edge are created) */
/* In another function */
vector<int32_t> component(num_vertices(graph));
int num = connected_components(graph, make_iterator_property_map(component.begin(), get(vertex_index, graph), component[0]));
私がこれまで理解した内容については、頂点のリストの使用は、各ノードの位置を使用してからブーストを防ぎしたがって、私は一種の「追加されたプロパティ」を使ってこのインデックス付けを自分自身に提供しなければなりません。
私はそれで罰金ですが、上記のコードは、ない作業を行います - 私は、インデックスの割り当てをやり直すない限り- connected_componentsラインでセグメンテーションフォールトになります。そうすることで、すべてが完璧に動作しますが、私が作成した精神的なイメージには意味がありません。
は、誰か
- は私の素人的にすべてこのindex_map「策略」を説明する良いの参照を与えてもらえますか? [OK]を、公式のドキュメントのトンがありますが、彼らは方法私にはあまりにも複雑な(私はCのプログラマーです)見える。私は高度なC++を学ぶことを計画していますが、私は現在、私の仕事のためにこのグラフアルゴリズムを実装しなければなりません。実際のコードを始める前にC++を学ぶのに3ヶ月かかることはありません...その時間内に上記のすべてをC言語で簡単に再実装していたでしょう...)
- なぜ私はこれをやっているのですか?
ありがとうございました。素敵な日です!
R