我需要製作一個簡單圖形的副本。如何在JGraphT中複製圖形?
我在圖表生成器 之間沒有看到圖表複製器,而UndirectedGraph沒有實現克隆方法。
年,我可以用手複製圖形。 但我想在一行中做到這一點。
我需要製作一個簡單圖形的副本。如何在JGraphT中複製圖形?
我在圖表生成器 之間沒有看到圖表複製器,而UndirectedGraph沒有實現克隆方法。
年,我可以用手複製圖形。 但我想在一行中做到這一點。
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()方法做一淺克隆。所以圖實例被克隆,但其中的頂點和邊不是。
一個很粗的(但很快)解決方案,以複製的圖形是:
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;
然而,要記住的是,該解決方案將具有高內存&計算的複雜性,如果圖表太大。捨棄中間反轉圖將改進解決方案。