2014-01-06 41 views
1

我使用JUNG DirectedGraph,我需要將給定的有向圖轉換爲反轉圖,以便新創建的圖包含原始圖中的所有頂點和邊,並且新圖中的所有邊都顛倒過來。我需要在模型上執行此轉換。
是否有JUNG實用程序提供此功能? 我使用JUNG版本2.0.1。 我意識到這很容易實現,只是更喜歡使用提供的實用工具(如果可用)。如何顛倒Jung DirectedGraph?

由於

回答

0

搜索JUNG2 API的一個大的部分之後,我假定不存在這樣的實用程序。需要的是邊緣轉換函數,但即使有很多應用程序,似乎也沒有任何這種效用函數的痕跡。

根據您的應用程序,可能需要一個不同的方法:您可以繼承DirectedGraph的子類,爲任何現有的圖形實現封裝,以便動態地反轉邊緣。具體而言,getInEdges()將返回getOutEdges(),反之亦然。您仍然需要包裝依賴於Edge方向的其他功能。

根據您的應用程序,這種方法可能比也可能不簡單,只是簡單地複製邊緣。

0

JUNG不提供這樣的實用程序。代碼來執行這將是非常簡單的,但是:

for (E edge : graph.getEdges()) { 
    graph2.addEdge(edge, graph.getDestination(edge), graph.getSource(edge)); 
} 

(如果該圖表可以有任何孤立頂點,那麼你就需要第二個循環,的頂點複製到graph2。)

Uli的建議(例如使用GraphDecorator來包裹圖形並在飛行中轉向邊緣方向)也可以正常工作。 (a)你想寫多少代碼和(b)你想要一個視圖還是(帶有反向的邊緣方向)的副本。

另一種選擇:如果您正在編寫專門用於這種方向反轉圖的代碼,那麼您可以簡單地將呼叫交換到getInEdges()getOutEdges()等。這可能是最簡單的選擇。