用boost库找到最小的图形

时间:2015-06-12 13:25:31

标签: c++ algorithm boost graph

我试图了解如何构建图表并使用boost库运行stoer_wagner_min_cut算法。

到目前为止,我使用adjacency_matrix容器构建了图表。

问题在于使stoer_wagner_min_cut工作。我红了this 文档和我遇到了两件事:

  1. “图表类型必须是顶点列表图和发生率图的模型。”
  2. WeightMap weights作为输入。
  3. 第一部分是什么意思?是adjacency_matrix某种类型的“顶点列表图和发生率图”?那是一个例子吗?

    另外,图中的所有边都具有权重1.我不明白如何组装WeightMap weights。并且找不到任何例子。

    修改

    这是我可以管理的 -

    #include <boost/graph/adjacency_matrix.hpp>
    #include <boost/graph/stoer_wagner_min_cut.hpp>
    #include <boost/property_map/property_map.h>
    
    using namespace boost;
    typedef adjacency_matrix<undirectedS> UGraph;
    
    
    void main()
    {
      static_property_map<UGraph, int>;   // im not sure about UGraph
    
      G = buildGraph();    // this function works fine
    
      parity_map = stoer_wagner_min_cut(G, ..?..);
    }
    

    如何定义此静态属性映射以返回int值为1?我有点挣扎。 我也看到stoer_wagner_min_cut的返回值是parity_map(ParityMap必须是可写属性映射的模型,其值类型应该是bool类型)

    我在建筑物中使用这些地图时会有点挣扎,我会很乐意为此提供一些指导和示例..

    感谢。

1 个答案:

答案 0 :(得分:2)

  1.   

    第一部分是什么意思? adjacency_matrix是某种类型的&#34;顶点列表图和发生率图&#34;?那是一个例子吗?

    这意味着图表类型必须模型命名的概念。这些概念记录在这里:

  2. 第二个问题是关于属性地图。他们也是concept

    在这种情况下,最简单的方法是提供静态属性映射:

    <强> Live On Coliru

    #include <boost/functional/hash.hpp>
    #include <boost/graph/adjacency_matrix.hpp>
    #include <boost/graph/stoer_wagner_min_cut.hpp>
    #include <boost/property_map/property_map.hpp>
    
    using namespace boost;
    
    typedef adjacency_matrix<undirectedS> UGraph;
    
    UGraph buildGraph() {
        UGraph g(10);
    
        // todo
    
        return g;
    }
    
    #include <iostream>
    
    int main() {
        UGraph g = buildGraph(); // this function works fine
    
        int i = stoer_wagner_min_cut(g, boost::make_static_property_map<UGraph::edge_descriptor>(1));
    
        std::cout << "i: " << i << "\n";
    }