2013-02-18 41 views
1

我需要製作一個簡單圖形的副本。如何在JGraphT中複製圖形?

我在圖表生成器 之間沒有看到圖表複製器,而UndirectedGraph沒有實現克隆方法。

年,我可以用手複製圖形。 但我想在一行中做到這一點。

回答

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()方法做一淺克隆。所以圖實例被克隆,但其中的頂點和邊不是。

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; 

然而,要記住的是,該解決方案將具有高內存&計算的複雜性,如果圖表太大。捨棄中間反轉圖將改進解決方案。