Как объединить / объединить несколько графов, используя LEMON (или BGL)

Я ищу способ объединить несколько графов в один граф, используя ЛИМОН. Если это не может быть сделано, я также был бы заинтересован в решениях, использующих Boost Graph Library.

В качестве фона я хочу определить более мелкие структурные единицы в виде графиков, пометить их свойствами и добавить несколько копий вместе для создания более сложных структур.

В приведенном ниже примере у меня есть 3 графика g1,g2, а также g3 состоящий из одной вершины. Я хочу объединить их в один граф и иметь возможность добавлять ребра, чтобы соединить вершины внутри результирующего графа. Тем не менее, я не знаю, как указать copyGraph функционировать правильно, чтобы все вершины g1, g2, а также g3 в конечном итоге на том же графике в конце. Кроме того, если g1 и т. д. содержит несколько связанных вершин, эти ребра должны оставаться неизменными.

Пример также содержит четвертый график gTest который выглядит как результат, которого я хочу достичь. Тем не мение, gTest здесь создается с нуля, а не путем объединения ранее существующих графиков. Это для демонстрации / пояснения и дает следующую графику:
Выход программы

Чтобы скомпилировать код, используя g ++, используйте

g++ -lemon main.cpp

#include <lemon/list_graph.h>
#include <lemon/graph_to_eps.h>

int main()
{
using namespace lemon;
typedef dim2::Point<int> Point;

ListGraph g1;
ListGraph::NodeMap<Point> coords1(g1);
ListGraph::Node n1 = g1.addNode();
coords1[n1] = Point(10,20);

ListGraph g2;
ListGraph::NodeMap<Point> coords2(g2);
ListGraph::Node n2 = g2.addNode();
coords2[n2] = Point(20,20);

ListGraph g3;
ListGraph::NodeMap<Point> coords3(g3);
ListGraph::Node n3 = g3.addNode();
coords3[n3] = Point(15,25);// pseudo-code of the copy-operation:
// copyGraph(g1, g3);
// copyGraph(g2, g3);
//
// g3.addEdge(n1,n3)
// g3.addEdge(n2,n3)// Result should look similar to what the following produces
ListGraph gTest;
ListGraph::NodeMap<Point> coordsTest(gTest);
ListGraph::Node n1Test = gTest.addNode();
coordsTest[n1Test] = Point(10,20);
ListGraph::Node n2Test = gTest.addNode();
coordsTest[n2Test] = Point(20,20);
ListGraph::Node n3Test = gTest.addNode();
coordsTest[n3Test] = Point(15,25);

ListGraph::Edge e1Test = gTest.addEdge(n3Test, n1Test);
ListGraph::Edge e2Test = gTest.addEdge(n3Test, n2Test);

graphToEps(gTest, "gTest.eps")
.coords(coordsTest)
.nodeTexts(coordsTest)
.run();

return 0;
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]