связность подграфов и графов в Boost

Я хочу знать, есть ли какие-то предопределенные функции для получения результатов этих двух тестов в виде логического значения в BOOST, тогда я помещу код (в ОБНОВЛЕНИЕ).

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 вычисляет количество подключенных компонентов на графике и присваивает каждому компоненту целочисленную метку. Затем алгоритм записывает, к какому компоненту принадлежит каждая вершина в графе, записывая номер компонента в карту свойств компонента.


person KHALDOUN Mohsen    schedule 10.03.2015    source источник
comment
Что будет означать, если возможность подключения будет представлена ​​логическим значением? Вы бы считали это правдой, если и только если бы g был полностью связан?   -  person Austin Mullins    schedule 10.03.2015
comment
Я вижу, вы больше не показываете никаких попыток ввода кода, а вместо этого просто запрашиваете код? Как написано, этот вопрос слишком широк, и я не вижу отношения к Boost или C ++. Изменить. Я немного запутался. Затем я заметил вторую учетную запись. Предполагая, что вы тот же парень   -  person sehe    schedule 10.03.2015
comment
@ ОстинМуллинс, да, сэр. .   -  person KHALDOUN Mohsen    schedule 10.03.2015
comment
@sehe Я просто спрашиваю, есть ли какие-то предопределенные функции для этого в BOOST, тогда я помещу код   -  person KHALDOUN Mohsen    schedule 10.03.2015
comment
Измените вопрос, чтобы сделать вашу цель более ясной, и включите код, который вы пробовали. На вопросы о том, какие функции находятся в конкретной библиотеке, лучше всего ответить, просмотрев документацию по этой библиотеке.   -  person Austin Mullins    schedule 10.03.2015
comment
@AustinMullins готово.   -  person KHALDOUN Mohsen    schedule 10.03.2015


Ответы (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;
}
person KHALDOUN Mohsen    schedule 21.03.2015