C++ 在自定义图形类型上使用boost::push_-relabel算法
我的图表有以下声明C++ 在自定义图形类型上使用boost::push_-relabel算法,c++,boost-graph,C++,Boost Graph,我的图表有以下声明 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<boo
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;
编译器(g++)正在生成长错误消息()。我怀疑我无法向函数传递正确类型的映射。函数签名可用
文件中给出了许多示例,但它们使用的图形与我的不同。我无法更改图形声明,否则许多代码将中断。我不习惯推广
属性映射
概念 此解决方案是由于llonesmiz
问题是,
reverse\u-edge\u-map
需要一个属性映射,该属性映射的键类型=edge\u-descriptor
和值类型=edge\u-descriptor
,我使用的属性映射的值类型=long
。我声明rev
为邻接列表\特征::边缘\描述符
。它认为我生成了一个seg错误,我认为这是函数逻辑的问题,而不是函数原型的问题。一个问题(可能是问题)是reverse\u edge\u map
需要一个带有key\u type=edge\u描述符和value\u type=edge\u描述符的属性映射,而您使用的属性映射具有value\u type=long。您可以使用邻接列表\u traits::edge\u descriptor
来声明您的rev
。如果你添加一个简单的示例图,我可以试着让它工作。谢谢你。有事情发生了。如果我不能解决这个问题,我会创建一个小例子,让你知道。@llonesmiz,你救了我一天。谢天谢地。请加上这个作为答案,我会接受的。再次感谢。:-)是一个使用的示例。
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)
);