如何逆转Jung DirectedGraph?

时间:2014-01-06 17:01:26

标签: java jung2

我正在使用JUNG DirectedGraph,我需要将给定的有向图转换为反转图,以便新创建的图包含原始图中的所有顶点和边,并且新图中的所有边都相反。我需要在模型上进行这种转换 是否有提供此功能的JUNG实用程序? 我使用JUNG 2.0.1版。 我意识到它很容易实现,只是更喜欢使用提供的实用程序(如果可用)。

由于

2 个答案:

答案 0 :(得分:0)

在搜索了大部分JUNG2 API后,我认为没有这样的实用程序。需要的是边缘转换函数,但即使有很多应用程序,似乎没有任何此类实用函数的痕迹。

根据您的应用程序,可能需要采用不同的方法:您可以创建子类DirectedGraph,为任何现有的Graph实现一个包装器,它可以动态反转边缘。具体而言,getInEdges()将返回getOutEdges(),反之亦然。您仍然需要包含依赖于Edge方向的其他函数。

根据您的应用程序,这种方法可能比简单地复制边缘更简单,也可能不简单。

答案 1 :(得分:0)

JUNG没有提供这样的实用程序。但是,执行此操作的代码非常简单:

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

(如果图形可以有任何孤立的顶点,那么您需要第二个循环将graph的顶点复制到graph2。)

Uli的建议(包装图形并在运行中转动边缘方向,例如使用GraphDecorator)也可以正常工作。您更喜欢哪一个取决于(a)您想要编写多少代码,以及(b)您是否需要graph的视图或副本(具有反向边缘方向)。

另一种选择:如果您编写的代码专门用于这种方向反转图形,那么您只需将调用交换到getInEdges()getOutEdges()等。这可能是最简单的选择。