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