我使用JUNG DirectedGraph,我需要將給定的有向圖轉換爲反轉圖,以便新創建的圖包含原始圖中的所有頂點和邊,並且新圖中的所有邊都顛倒過來。我需要在模型上執行此轉換。
是否有JUNG實用程序提供此功能? 我使用JUNG版本2.0.1。 我意識到這很容易實現,只是更喜歡使用提供的實用工具(如果可用)。如何顛倒Jung DirectedGraph?
由於
我使用JUNG DirectedGraph,我需要將給定的有向圖轉換爲反轉圖,以便新創建的圖包含原始圖中的所有頂點和邊,並且新圖中的所有邊都顛倒過來。我需要在模型上執行此轉換。
是否有JUNG實用程序提供此功能? 我使用JUNG版本2.0.1。 我意識到這很容易實現,只是更喜歡使用提供的實用工具(如果可用)。如何顛倒Jung DirectedGraph?
由於
搜索JUNG2 API的一個大的部分之後,我假定不存在這樣的實用程序。需要的是邊緣轉換函數,但即使有很多應用程序,似乎也沒有任何這種效用函數的痕跡。
根據您的應用程序,可能需要一個不同的方法:您可以繼承DirectedGraph
的子類,爲任何現有的圖形實現封裝,以便動態地反轉邊緣。具體而言,getInEdges()
將返回getOutEdges()
,反之亦然。您仍然需要包裝依賴於Edge方向的其他功能。
根據您的應用程序,這種方法可能比也可能不簡單,只是簡單地複製邊緣。
JUNG不提供這樣的實用程序。代碼來執行這將是非常簡單的,但是:
for (E edge : graph.getEdges()) {
graph2.addEdge(edge, graph.getDestination(edge), graph.getSource(edge));
}
(如果該圖表可以有任何孤立頂點,那麼你就需要第二個循環,的頂點複製到graph2
。)
Uli的建議(例如使用GraphDecorator來包裹圖形並在飛行中轉向邊緣方向)也可以正常工作。 (a)你想寫多少代碼和(b)你想要一個視圖還是(帶有反向的邊緣方向)的副本。
另一種選擇:如果您正在編寫專門用於這種方向反轉圖的代碼,那麼您可以簡單地將呼叫交換到getInEdges()
至getOutEdges()
等。這可能是最簡單的選擇。