【问题标题】:Graph representation in JavaJava 中的图形表示
【发布时间】:2012-03-03 09:29:58
【问题描述】:

我必须制作一个使用图表(数据结构)的应用程序,但我不知道如何表示它们,并询问您是否可以给我一些提示。

我应该创建一个顶点和边缘类吗?如果是,它们的属性应该是什么?

【问题讨论】:

    标签: java data-structures graph


    【解决方案1】:

    我建议对图表使用邻接表。

    最简单的方法可能是创建一个Vertex 类,其中包含指向相邻顶点的链接的ArrayList<Vertex> 列表。这足以表示任何图形,您不需要单独的 Edge 类。

    您可以将您喜欢的任何其他数据属性添加到顶点类,但您只需要链接列表。

    请注意,您可以有有向边(单向链接)或无向边(相邻顶点相互指向)。

    【讨论】:

    • 我对上述图表的实现有疑问。对于无向图,当我实现 addEdge 函数时,我应该在同一个函数中添加两个方向的边吗??
    • @ueg1990 - 你可以这样做。这取决于您的数据结构,它当然可以加快一些图形搜索以具有双向指针。另一种方法是一个列表,其中每个无向边存储一次为 (a,b),其中顶点 a 和 b 按排序顺序(例如,按顶点 ID 排序)。
    • 但是对于无向图,如果我们有一条从 a 到 b 的边,那么根据定义我们应该添加一条从 b 到 a 的边,对吧??
    • 每个顶点对象中都有 ArrayList。如何表示图的所有顶点?地图还是列表更好?
    【解决方案2】:

    你可以用典型的方式来表示它。 See here。例如:

    【讨论】:

      【解决方案3】:

      这并不是 Java 特有的。两种最常见的表示是邻接矩阵和列表。详情here

      如果你想要一个库,JGraphT 很好

      【讨论】:

      • 我的疑问是我如何制作代码,例如: public class Vertex{ ... } public class Edge{ ... } 如果是这样的话,我把什么作为属性。顺便说一句,目标是使用 Prim 算法制作最小生成树。什么表现更好?
      • 我应该自己制作结构,而不是使用图书馆或其他东西
      【解决方案4】:

      这取决于您的用例,但您可能想尝试利用像 neo4j 这样的“图形数据库”

      【讨论】:

      • (我知道你必须自己制作结构,但其他有相同问题的人可能不会:))
      猜你喜欢
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      相关资源
      最近更新 更多