假设我们有一个有向标记的图形,即一个图形,其中从顶点到另一个的边缘用一个值标记。我们如何在Java中对此进行建模? (或者一般是面向对象的语言?)
我目前的解决方案是让一个Vertex
课程有Collection<Edge> outgoingEdges
和Collection<Edge> incomingEdges
,其中Edge
是一个有三个字段的课程:
label
这是边缘的标签predecessor
这是来源Vertex
successor
这是目的地Vertex
其他解决方案?
答案 0 :(得分:1)
看起来不错。它类似于在数据库中使用辅助表对多对多关系进行建模的标准技术,以保存有关关系的信息。
你还有一个根顶点集合吗?
根据您需要进行的遍历,您可能不需要传入边缘 - 例如如果你只是从根源开始。
严格来说,你甚至不需要Vertex对象,如果没有附加任何其他信息,你可以只为顶点编号并将数字放在每个边的前驱和后继中。然而,这可能会有点远:)
答案 1 :(得分:1)
我不想说你需要分离传出和传入的边缘,你可以检查顶点是源还是目标,并且有一个实用的方法可以让你传出和传入。我注意到很多实现代码定向和无向图不同,实际上没有理由。
答案 2 :(得分:0)
我认为你所做的是对的。您可以添加一个Graph类,其中包含顶点列表和edge列表作为成员。
您已将所有实体表示为对象,因此对我来说没问题。