Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的标记图表示_Java_Oop_Data Structures_Graph - Fatal编程技术网

Java中的标记图表示

Java中的标记图表示,java,oop,data-structures,graph,Java,Oop,Data Structures,Graph,假设我们有一个有向标记图,即从一个顶点到另一个顶点的边用一个值标记的图。我们如何用Java建模?(或者通常使用面向对象语言?) 我当前的解决方案是使用一个类Vertex,该类有一个集合支出项和一个集合收入边,其中边是一个具有三个字段的类: label哪个是边的标签 前身哪个是源顶点 后续哪个是目标顶点 其他解决方案?看起来还可以。这类似于在数据库中建模多对多关系的标准技术,数据库中有一个辅助表来保存有关关系的信息 是否也有根顶点的集合 根据需要进行的遍历,可能不需要传入边-例如,如果仅从根开

假设我们有一个有向标记图,即从一个顶点到另一个顶点的边用一个值标记的图。我们如何用Java建模?(或者通常使用面向对象语言?)

我当前的解决方案是使用一个类
Vertex
,该类有一个
集合支出项
和一个
集合收入边
,其中
是一个具有三个字段的类:

  • label
    哪个是边的标签
  • 前身
    哪个是源
    顶点
  • 后续
    哪个是目标
    顶点

其他解决方案?

看起来还可以。这类似于在数据库中建模多对多关系的标准技术,数据库中有一个辅助表来保存有关关系的信息

是否也有根顶点的集合

根据需要进行的遍历,可能不需要传入边-例如,如果仅从根开始


严格地说,您甚至不需要顶点对象,如果没有附加任何其他信息,您可以对顶点进行编号,并将编号放在每条边的前置和后继中。不过,这可能有点过分:)

我认为你所做的是对的。您可以添加一个图形类,该类的成员包括顶点列表和边列表


您已将所有实体表示为对象,因此我觉得这没问题。

我不会说您需要分离出射边和入射边,您只需检查顶点是源还是目标,并使用实用方法提供出射边和入射边。我注意到很多实现代码定向图和无向图都不同,真的没有理由这样做。

。。。“根顶点”是什么意思?据我回忆,只有树有根。。。还是不?我没有提到节点中包含信息,所以它们是必需的,但您在下面加了下划线,在某些情况下可以忽略它们。前导在一般数据结构中可能很有用,但你是对的,它们并不是表示我用根垂直描述的结构的严格必要条件,我指的是没有前导的顶点集合。大多数遍历的起点可能是正确的,尽管在效率方面,区分顶点可以避免重复过滤效率,并且OO语言(尤其是VM)不能很好地结合在一起。如果以原始速度为目标,您将使用邻接矩阵(或者至少用一些基本类型替换对象)。我已经写了9年的图形库了,我会诚实地说,它归结为OO抽象或原始速度,很少有理由证明任何东西在中间。