如何在JGraphT中复制图形?

时间:2013-02-18 14:27:49

标签: java graph jgrapht

我需要复制一个简单的图表。

我没有在图形生成器中看到图形复制器 和UndirectedGraph没有实现克隆方法。

年,我可以手工复制图表。 但我想在一行中做到这一点。

2 个答案:

答案 0 :(得分:1)

UndirectedGraph是一个界面。但是,大多数具体的子类(例如SimpleGraph)扩展了AbstractBaseGraph,它实现了clone()方法。

因此,如果您可以保证手中的UndirectedGraph继承自AbstractBaseGraph,只需转换为AbstractBaseGraph并调用clone方法。

public void someMethod(UndirectedGraph g)
{
  // Do some stuff...

  ((AbstractBaseGraph)g).clone(); // <== Your 1-liner

  // Do some more stuff...
}

请记住,according to the JavaDoc,clone()方法执行浅层克隆。因此克隆了图形实例,但其中的顶点和边缘不是。

答案 1 :(得分:0)

复制图表的一个非常粗略(但很快)的解决方案是:

    DirectedGraph<String, DefaultEdge> graph = new DefaultDirectedGraph<String, DefaultEdge>(DefaultEdge.class);
    DirectedGraph<String, DefaultEdge> revGraph = new EdgeReversedGraph<>(graph);
    DirectedGraph<String, DefaultEdge> graphCopy = new EdgeReversedGraph<>(revGraph);
    //To reduce the memory complexity
    revGraph = null;

然而,要记住,解决方案将具有高内存和如果图形太大,计算复杂度。丢弃中间反转图将改善解决方案。