簡體   English   中英

Java中具有未知頂點數的無向圖

[英]Undirected graph in Java with unknown number of vertices

我正在嘗試在Java中使用頂點的“實時訂閱源”創建無向圖。 我有一個來自txt文件的頂點。 該文件的結構如下:

1 2 #connect node 1 with node 2

2 3 #connect node 1 with node 2

等等。 我決定創建一個ArrayList的ArrayList(一個2d ArrayList),以將節點和邊存儲在數組列表中。 我的要求是我必須保持恆定的時間來檢查兩個邊緣之間是否存在路徑或不存在。 我還沒有真正使用過2D ArrayList,因此非常感謝你們的領先。

這是我使用圖形的觀點以及我在圖形方面的經驗。

第一

圖是圖,不是數組,不是矩陣,不是這些。 我為什么這么說? 因為如果要在矩陣中表示關系,則圖的結構可能非常大。 表示圖形的矩陣的增長可以成倍地增長。

處理對象

可以執行的一種表示形式是使用Java對象。 創建兩種類型的對象。 一個將是節點,另一個將是邊緣。 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對象的數組,使用該edge,您可以找到所擁有的關系類型以及與誰的關系。

但是... gb不會破壞這一優勢嗎? 很簡單,兩個Node類都引用Edge類。 如果它們都不與邊緣類有關系,則gb將消耗它。

通過Java中的Ref

我不記得如何在Java中通過Ref設置對象。 自大學以來,我沒有使用Java編程。 因此,要使該方法正常工作,請檢查java中的By Ref,因為Python byRef是隱式的。

因此,通過此實現,您可以采用較小的數組,並且可以確保節點和adges將存在關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM