生成具有负边缘权重的随机图,并且没有负循环

时间:2016-03-12 13:58:31

标签: c++ boost graph

负循环中边缘权重的总和为负。有了这个概念,有没有任何方法可以生成具有随机正负边权重的图形,并且没有负循环?此类图表对于测试bellman_ford_shortest_paths方法非常有用。

注意:在this post中,他们会生成没有boost库条件的图表。

1 个答案:

答案 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
}