如何使用Boost Graph Library更改图表中的边缘权重?

Ree*_*rds 4 c++ boost graph boost-graph

我使用Boost图库定义了一个Graph,

typedef boost::property<boost::edge_weight_t, int> EdgeWeightProperty;
typedef boost::adjacency_list<boost::listS, boost::vecS,boost::undirectedS,boost::no_property,EdgeWeightProperty> Graph;
Run Code Online (Sandbox Code Playgroud)

使用添加边缘相当简单

boost::add_edge(vertice1, vertice2, weight, graph);
Run Code Online (Sandbox Code Playgroud)

我还没有弄清楚如何设置边缘重量.一种可能的解决方案是删除边缘并使用更新的权重值重新添加它,但是,这看起来有点过分.

Ree*_*rds 8

一种解决方案是执行以下操作

typedef boost::adjacency_list<boost::setS, boost::vecS, boost::undirectedS,boost::no_property,EdgeWeightProperty> Graph;
typedef Graph::edge_descriptor Edge;
Graph g;
std::pair<Edge, bool> ed = boost::edge(v1,v2,g);
int weight = get(boost::edge_weight_t(), g, ed.first);
int weightToAdd = 10;
boost::put(boost::edge_weight_t(), g, ed.first, weight+weightToAdd);
Run Code Online (Sandbox Code Playgroud)