我正在尝试使用顶点的“实时馈送”在Java中创建无向图。我有一个从txt文件进来的顶点。 该文件的结构如下,
1 2 #connect node 1 with node 2
2 3 #connect node 1 with node 2
等等。我决定创建一个ArrayList的ArrayList(一个2d ArrayList)来存储数组列表中的节点和边。我的要求是我必须保持恒定的时间来检查两条边之间是否存在路径或不存在。 我还没有真正使用过2d ArrayList,你们中的任何人都会非常感激。
答案 0 :(得分:0)
以下是我使用图表和我的经验的观点。
图形是图形,不是数组,不是矩阵,而不是这些。我为什么这么说?因为如果你想在矩阵中表示关系,图形的结构可能真的非常大。用于表示图形的矩阵的增长可能呈指数级增长。
您可以使用java对象进行一种表示。创建两种类型的对象。一个是Node,另一个是de edge。 Node对象应该有一个边数组。 像这样:(我不是java开发人员所以这里是python)
class Node:
def __init__(self, value): #here is the constructor
self.value = obj #here we are setting the identification of node
self.edges = []
def setEdges(self, edge)
self.edges.append(edge)
#do other stuffs
边缘将是这样的:
class Edge:
def __init__(self, node1, node2, value):
self.value = value
self.nodes = [node1, node2]
node1.setEdges(self) #self is the same as this in java
node2.setEdges(self)
我们现在有什么?我们有一个对象可以存储它所拥有的边,而另一个对象只存储一个值并设置它的关系。它可以设置关系。那么如何在主脚本中使用它呢?
这将很容易。看一个例子:
me = Node('Me')
you = Node('You')
那么,如何设置关系?
Edge(me, you, 'StackOverflow')
这是通过StackOverflow阐明我和你的关系的边缘。 在这里,您将能够在每个对象中看到它们具有的边缘数组:
me.edges
这将返回Edges对象的数组,通过此边缘,您可以找到您拥有的关系类型以及与谁对象。
但是......这个边缘怎么不会被gb破坏? 很简单,两个Node类都引用了Edge类。如果它们都没有与边缘类有关系,那么gb将使用它。
我不记得如何通过Ref in Java设置对象。自从大学以来,我没有用Java编程。所以对于这个东西正确检查java中的By Ref,因为Python byRef是隐式的。
因此,通过此实现,您可以获取小数组,并且可以确保您的节点和adges存在关系。