4

Boost グラフ ライブラリは初めてで、graphviz を使用してグラフを描画しようとしています。

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
#include <boost/utility.hpp>                // for boost::tie
#include <iostream>
#include <utility>                          // for std::pair

using namespace boost;
using namespace std;

class V {};
class C {};

void draw_test(){
    typedef boost::adjacency_list<boost::listS, boost::listS, boost::bidirectionalS, V, C > MyGraph;
        typedef boost::graph_traits<MyGraph>::vertex_descriptor vertex_descriptor;
    MyGraph g;
    vertex_descriptor a = add_vertex(V(), g);
    vertex_descriptor b = add_vertex(V(), g);
    add_edge(a, b, g);
    write_graphviz(std::cout, g);
}

int main() {
    draw_test();

    return 0;
}

しかし、次のエラーが発生しました:

http://pastebin.com/KmTyyUHh

どんな助けにもとても感謝します

4

1 に答える 1

2

この質問 ( 12 ) でまったく同じ問題を見つけることができます。問題は、write_graphviz が (他の多くの Boost.Graph 関数と同様に) 頂点インデックス プロパティ マップを必要とすることです。VertexList として listS を持つ adjacency_list には、デフォルトでは 1 つがありません。2 番目のテンプレート パラメータでlistS単に使用する必要がある場合を除きます。vecS最初のリンクされた回答で見つけることができる別の方法は、外部頂点インデックス プロパティ マップを作成して初期化し、write_graphvizそれを明示的に渡すことができるオーバーロードを使用することです。listSこれは、またはsetSグラフで使用する必要がある場合に、多数のアルゴリズムに非常に役立ちます。

于 2012-11-21T17:57:31.050 に答える