我正在使用 JUNG DirectedGraph,我需要将给定的有向图转换为反转图,以便新创建的图包含原始图的所有顶点和边,并且新图中的所有边都反转。我需要对模型执行此转换。
是否有提供此功能的 JUNG 实用程序?我使用 JUNG 2.0.1 版。我意识到它很容易实现,只是更喜欢使用提供的实用程序(如果可用)。
谢谢
在搜索了大部分 JUNG2 API 之后,我认为没有这样的实用程序。需要的是边缘变换函数,但即使有很多应用程序,似乎也没有任何此类效用函数的痕迹。
根据您的应用程序,不同的方法可能值得一看:您可以子类化DirectedGraph
,为任何现有的 Graph 实现一个包装器,该包装器可以即时反转边缘。具体来说,getInEdges()
会返回getOutEdges()
,反之亦然。您仍然需要包装其他依赖于边缘方向的函数。
根据您的应用程序,这种方法可能会也可能不会比简单地复制边缘更简单。
JUNG 不提供这样的实用程序。但是,执行此操作的代码非常简单:
for (E edge : graph.getEdges()) {
graph2.addEdge(edge, graph.getDestination(edge), graph.getSource(edge));
}
(如果图形可以有任何孤立的顶点,那么您需要第二个循环将graph
的顶点复制到graph2
。)
Uli 的建议(包装图形并在运行中转动边缘方向,例如使用GraphDecorator)也可以正常工作。您更喜欢哪一个取决于(a)您要编写多少代码以及(b)您是否想要视图或副本graph
(具有反向边缘方向)。
另一种选择:如果您正在编写专门用于这种反向图的代码,那么您可以简单地交换对getInEdges()
to 的调用getOutEdges()
等。这可能是最简单的选择。