3

私のグラフには次の宣言があります

struct vertex_info 
{
  std::string name;
  std::string label;    
  unsigned int type;
  bool isND; 
};

struct edge_info 
{
  std::string name;
  long capacity;
  long residualCapacity;
  long rev;
};

typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS
  , vertex_info, edge_info > expr_graph_t;

とノードでグラフ(フローネットワーク)flowGを構築しました。次に、ブーストグラフライブラリで指定された方法を使用して最大フローを計算します。次のように関数を呼び出しています。sourcesinkpush_relabel

  push_relabel_max_flow(flowG, source, sink
      , get(&edge_info::capacity, flowG)
      , get(&edge_info::residualCapacity, flowG)
      , get(&edge_info::rev, flowG)
      , get(boost::vertex_index, flowG)
      );

コンパイラ(g ++)は長いエラーメッセージを生成しています(ここに貼り付けられています)。正しいタイプのマップを関数に渡すことができないのではないかと思います。関数のシグネチャは、boost-docで入手できます。

ドキュメントには多くの例がありますが、グラフを使用しているのは私のものとは異なります。グラフ宣言を変更することはできません。変更しないと、多くのコードが壊れてしまいます。私はproperty_map概念を後押しすることに慣れていません。

4

1 に答える 1

2

この解決策は llonesmiz によるものです。

問題は、 key_type=と value_type=reverse_edge_mapのプロパティ マップが必要であり、私が使用したものには value_type= があることです。として宣言しました。そして、関数のプロトタイプではなく、関数のロジックに問題があると思われるセグフォルトを生成したと考えてコンパイルしました。edge_descriptoredge_descriptorlongrevadjacency_list_traits<vecS,vecS,bidirectionalS>::edge_descriptor

于 2013-03-20T12:10:16.303 に答える