10

私はC++テンプレートに錆びていて、ブーストグラフライブラリ(致命的な組み合わせ)を使用しています。Webを検索しましたが、カスタムグラフ構造を取得して、ブーストグラフトラバースアルゴリズムを使用できるBGL(ブーストグラフライブラリ)に十分に適合させる方法についての直接的な指示が見つかりません。私を助けるのに十分な図書館に精通している人はいますか?

編集:それで、私が抱えている主な問題は、任意のグラフをBGLグラフにマップするための合計要件があるソースをどこで見つけるかです。私はテンプレートに本当に慣れていないので、BGLの仕様/例を読むのは難しいです。たぶん私はテンプレートの一般的な情報源を探す必要がありますか?

4

2 に答える 2

6

BGL の上にかなりの量のコードが書かれていない限り、BGL の使用を完全に放棄することをお勧めします。私は最近、大規模なグラフ分析プロジェクトで将来使用するためにそれをテストしていましたが、過度に複雑で設計が不十分な API のために、ほとんど使用できないことがわかりました。

BGL には単純なタスクはなく、複雑なタスクしかありません。BGL のテンプレート階層が非常に複雑なため、常にコンパイラと戦っていました。有用なドキュメントがほとんどまたはまったくなく (少なくとも、本当に必要な場合にはそうではありません)、十分な例がないと、問題が悪化するだけです。それはコードを書く方法ではありません。

LEMONに切り替えることをお勧めします。安定しており、C++ で記述され、理解しやすく、コードインされており、さまざまな使用ニーズをサポートするためにいくつかの特殊な形式のグラフを提供し、BFS と DFS の両方の検索/ビジター機能をサポートしています。また、ノード/エッジのプロパティ マップに相当する独自の機能も備えているため、独自のグラフ構造やその他のデータをそれに適合させることができます。

レモンを試してみてください。味がずっと良くなり、潰瘍が少なくなります。;-)

于 2010-06-15T21:14:20.363 に答える
5

私が理解しているアプローチは、boost::graph_traitsグラフタイプの構造を特殊化することです。これにより、グラフについて知る必要があるさまざまな重要なプロパティで BGL が構成されます。graph_traits次に、特定の種類のグラフに適用されるブースト グラフ インターフェイスを実装するために、グラフの特殊なタイプのグローバル テンプレート関数を特殊化します。

例は、BGL ドキュメントにあります。

http://www.boost.org/doc/libs/1_43_0/libs/graph/doc/leda_conversion.html

そこには、さまざまなインターフェイスのいくつかへのリンクがあり、そのインターフェイスをサポートしたい場合に、グラフに特化する必要があるグローバル テンプレート関数を示しています。インターフェイスの完全なリストは次のとおりです。

http://www.boost.org/doc/libs/1_43_0/libs/graph/doc/graph_concepts.html

于 2010-06-14T18:20:08.477 に答える