【问题标题】:subgraph and graph connectivity in boostboost中的子图和图连接
【发布时间】:2015-03-10 14:36:59
【问题描述】:

我想知道是否有一些预定义的函数可以在 BOOST 中将这两个测试结果作为布尔值,然后我会将代码放入(在 UPDATE 中)。

1- 如果图 g1 是 g2 的子图(将 g1 和 g2 作为函数参数)。

这里http://www.boost.org/doc/libs/1_57_0/libs/graph/doc/subgraph.html 子图用作类而不是函数。

2- 图 g 连通性(通过将 g 作为函数参数)。

在这里http://www.boost.org/doc/libs/1_57_0/libs/graph/doc/connected_components.html 的官方文档中,我发现connected_components 函数计算图中有多少连通分量,并为每个分量分配一个整数标签。然后该算法通过在组件属性图中记录组件编号来记录图中每个顶点属于哪个组件。

【问题讨论】:

  • 用布尔值表示连接意味着什么?当且仅当 g 完全连通时,你会认为它是真的吗?
  • 我看到你已经不再显示任何代码尝试,而只是询问代码?正如所写的那样,这个问题太宽泛了,我认为与 Boost 或 C++ 没有任何关系。 编辑我有点困惑。 Then I noticed the second account。假设你是同一个人
  • @AustinMullins 是的,先生。 .
  • @sehe 我只是问在 BOOST 中是否有一些预定义的函数可以做到这一点,然后我会放代码
  • 请编辑问题以使您的目标更清晰,并包含您尝试过的代码。有关特定库中有哪些函数的问题,最好通过查看该库的文档来回答。

标签: c++ boost graph connectivity subgraph


【解决方案1】:

好吧,这里有两个例子:

测试图 g1 是否是 g2 的子图(通过将 g1 和 g2 作为函数参数):

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/vf2_sub_graph_iso.hpp>
using namespace std;
using namespace boost;

struct my_callback 
{
    template <typename CorrespondenceMap1To2, typename CorrespondenceMap2To1>
    bool operator()(CorrespondenceMap1To2 f, CorrespondenceMap2To1 g) const 
    {
        return false;
    }
};


int main() {

  typedef adjacency_list<setS, vecS, bidirectionalS> graph_type;

  // Build graph1
  int num_vertices1 = 8; graph_type graph1(num_vertices1);
  add_edge(0, 6, graph1); 
  add_edge(0, 7, graph1);
  add_edge(1, 5, graph1); 
  add_edge(1, 7, graph1);
  add_edge(2, 4, graph1); 
  add_edge(2, 5, graph1); 
  add_edge(2, 6, graph1);
  add_edge(3, 4, graph1);

  // Build graph2
  int num_vertices2 = 9; graph_type graph2(num_vertices2);
  add_edge(0, 6, graph2); 
  add_edge(0, 8, graph2);
  add_edge(1, 5, graph2); 
  add_edge(1, 7, graph2);
  add_edge(2, 4, graph2); 
  add_edge(2, 7, graph2); 
  add_edge(2, 8, graph2);
  add_edge(3, 4, graph2); 
  add_edge(3, 5, graph2); 
  add_edge(3, 6, graph2);

  // Create callback to print mappings
  //vf2_print_callback<graph_type, graph_type> callback(graph1, graph2);

  // Print out all subgraph isomorphism mappings between graph1 and graph2.
  // Vertices and edges are assumed to be always equivalent.
  cout<<vf2_subgraph_iso(graph1, graph2,my_callback())<<endl;

  return 0;
}

测试图 g 连通性(通过将 g 作为函数参数):

bool graphconnexe(Graph const& g) {
    return num_edges(g) >= num_vertices(g) - 1;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    相关资源
    最近更新 更多