负循环中边缘权重的总和为负。有了这个概念,有没有任何方法可以生成具有随机正负边权重的图形,并且没有负循环?此类图表对于测试bellman_ford_shortest_paths
方法非常有用。
注意:在this post中,他们会生成没有boost
库条件的图表。
答案 0 :(得分:2)
我建议使用generate_random_graph
生成随机图并将任何负循环修复为后处理步骤。
E.g:
<强> Live On Coliru 强>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/random.hpp>
#include <random>
#include <iostream>
using Graph = boost::adjacency_list<
boost::vecS,
boost::vecS,
boost::directedS,
boost::no_property,
boost::property<boost::edge_weight_t, double> >;
int main()
{
std::mt19937 prng;
Graph g;
generate_random_graph(g, 100, 200, prng);
// find cycles with negative sum and just add a large enough value to one
// of the participating edges to make it postive
}