2017-01-25 1 views
1

既存のグラフデータ構造とブーストグラフライブラリ(BGL)を使用して:次のように私は、自分自身の頂点およびエッジのクラスから構築された既存のグラフを有する

struct Graph; 

struct OutPort {}; 

struct InPort { 
    OutPort* connectedOutput; 
}; 

struct Node { 
    Graph* graph; 
    std::list<InPort> inputs; 
    std::list<OutPort> outputs; 
}; 

struct Graph { 
    std::list<Node> nodes; 
} 

、グラフのノードで構成されているされていること、これらは0 .. *入出力ポートを持ちます。入力ポートは、任意のノード(それ自身を含む)の0..1出力ポートに接続される。

私は、このグラフにBGLアルゴリズムを適用したいと思いますが、上記の既存のデータ構造を保持するか、BGLデータ構造との間の適切なマッピングを提供する方法を理解することはできません。

私は入門例に感謝します。

答えて

0

例を作成することは少し複雑です。ただし、選択したグラフの概念をモデル化する必要があります。

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

enter image description here

私は(ポートがうまく切断、または多分OutPortできることなどNodeに戻って参照)、それはハードエッジが表現されているどのようにあなたのモデルから見ることがわかります。私はあなたがAdjacencyGraphをモデル化したいと思うかも知れません。必要な操作はリンクされたページに表示されます。

+0

ありがとうございました。私の例はまれな骨ですが、ポートは常に1つのノードによって所有されています。 OutPortsは何も参照しません.InPortsは0..1 OutPortを参照します。 –

+1

だから、どのようにして頂点を識別したいですか?私は単一のインポートで計算しますか?その場合は、基本的にあなた自身のアドホックなadjacency_listがあります。 Boostの汎用モデルは、VertexAndEdgeListGraph、MutablePropertyGraph、CopyConstructible、Assignable、およびSerializableをモデル化しています。あなたはおそらくそれらのサブセットで十分でしょう:) – sehe

関連する問題