Как объединить два графика в JUNG? - PullRequest
0 голосов
/ 23 августа 2011

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

1 Ответ

0 голосов
/ 24 августа 2011

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

// given Graph g1, g2
Graph g = new [appropriate Graph implementation]
for (V v : Collections.union(g1.getVertices(), g2.getVertices())) {
  g.addVertex(v);
}
for (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));

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

...