【问题标题】:How to reverse Jung DirectedGraph?如何反转 Jung DirectedGraph?
【发布时间】:2016-07-07 08:14:59
【问题描述】:

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

谢谢

【问题讨论】:

    标签: java jung2


    【解决方案1】:

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

    根据您的应用程序,不同的方法可能值得一看:您可以继承 DirectedGraph,为任何现有的 Graph 实现动态反转边的包装器。具体来说,getInEdges() 将返回 getOutEdges(),反之亦然。您仍然需要包装其他依赖于 Edge 方向的函数。

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

    【讨论】:

      【解决方案2】:

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

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

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

      Uli 的建议(环绕图形并在运行中转动边缘方向,例如使用GraphDecorator)也可以正常工作。您更喜欢哪一个取决于 (a) 您要编写多少代码,以及 (b) 您是否想要查看或复制 graph(边缘方向相反)。

      另一种选择:如果您正在编写专门用于这种反向图的代码,那么您可以简单地将对getInEdges() 的调用交换为getOutEdges() 等。这可能是最简单的选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-21
        相关资源
        最近更新 更多