0

BOOSTでこれら2つのテスト結果をブール値として取得するための事前定義された関数があるかどうかを知りたいので、コードを(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 関数がグラフ内の接続コンポーネントの数を計算し、各コンポーネントに整数ラベル。次に、アルゴリズムは、コンポーネント プロパティ マップにコンポーネント番号を記録することにより、グラフ内の各頂点が属するコンポーネントを記録します。

4

1 に答える 1

1

さて、ここに2つの例があります:

グラフ 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;
}
于 2015-03-21T08:12:25.160 に答える