My图表具有以下声明使用boost :: push_relabel算法
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
与source
和sink
节点。现在我想用升压图库中给出的push_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 ++)正在生成长错误消息(pasted here)。我怀疑我无法将正确类型的地图传递给函数。功能签名可用here in boost-doc。
在文档中给出了很多例子,但它们使用的图形与我的不同。我不能改变图形声明,否则很多代码都会中断。我不习惯提高property_map
的概念。
一个问题(可能是问题)是'reverse_edge_map'需要一个属性映射,其中key_type = edge_descriptor和value_type = edge_descriptor,你使用的值是value_type = long。你可以使用'adjacency_list_traits :: edge_descriptor'声明你的'rev'。如果你添加一个简单的示例图,我可以尝试使其工作。 –
2013-03-18 14:37:28
谢谢你。发生了一些事情。如果我不能理清它,我会创建一个小例子并让你知道。 – Dilawar 2013-03-18 16:10:35
@llonesmiz男人,你救了我的一天。不能够感谢。请添加此作为答案,我会接受它。再次感谢。 :-) – Dilawar 2013-03-18 16:18:06