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带有sourcesink节点的图(流网络)。现在我想使用push_relabelboost 图形库中给出的方法计算最大流量。我正在调用该函数,如下所示。

  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。

问题是reverse_edge_map需要一个带有 key_type=edge_descriptor和 value_type=的属性映射,edge_descriptor而我使用的那个有 value_type= long。我宣布revadjacency_list_traits<vecS,vecS,bidirectionalS>::edge_descriptor. 它编译认为我生成了一个段错误,我认为这是函数逻辑而不是函数原型的问题。

于 2013-03-20T12:10:16.303 回答