Как объединить два графика в JUNG?

Мне нужно объединить графы, которые я хочу объединить, то есть создать новый граф, состоящий из объединения ребер и узлов графа (без повторений). Есть ли реализация для этого в JUNG или я должен сделать это самостоятельно?

1 ответ

Решение

В JUNG нет реализации для этого, но речь идет о шести строках кода, предполагающих, что графы, вершины и ребра имеют одинаковые типы:

// заданный график g1, g2
График g = новый [соответствующая реализация Графика]
for (V v: Collections.union(g1.getVertices(), g2.getVertices())) {
  g.addVertex(v);
}
для (E e: g1.getEdges()) {
  g.addEdge(e, g1.getEndpoints(e));
}
for (E e: g2.getEdges()) {
  g.addEdge(e, g2.getEndpoints(e));
}

Вы можете пропустить добавление вершин, если нет изолированных вершин (т. Е. Вершин, у которых нет инцидентных ребер); addEdge() добавит любые инцидентные вершины.

Если график направлен, вы можете изменить вышеприведенное на

g.addEdge(e, g1.getSource(e), g1.getDest(e));

Дубликаты молча игнорируются (если вы хотите узнать, оказало ли добавление эффект, проверьте возвращаемое значение).

Другие вопросы по тегам