2012-03-03 46 views
4

我必須製作一個使用圖形(數據結構)的應用程序,但我不知道如何表示它們,並詢問是否可以給我一些提示。Java中的圖形表示

我應該創建一個類Vertex和Edge嗎?如果是的話,他們的屬性應該是什麼?

回答

11

我建議使用鄰接表爲曲線圖。

最簡單的方法可能是製作一個Vertex類,其中包含一個鏈接到相鄰頂點的ArrayList<Vertex>列表。這足以表示任何圖形,您不需要單獨的Edge類。

您可以將任何其他您喜歡的數據屬性添加到頂點類中,但鏈接列表完全是您所需要的。

請注意,您可以有定向邊(單向鏈接)或無向邊(相鄰頂點相互指向)。

+0

我有一個問題,上面的圖形執行。對於無向圖,當我實現addEdge函數時,是否應該在相同函數中的兩個方向上添加邊? – ueg1990 2013-07-29 16:49:27

+0

@ ueg1990 - 你可以這樣做。這取決於你的數據結構,它肯定會加快一些圖搜索的雙向指針。另一種做法是將每個無向邊存儲一次的列表作爲(a,b),其中頂點a和b按排序順序(例如按頂點ID排序)。 – mikera 2013-07-29 17:16:25

+0

但對於無向圖,如果我們有從a到b的邊,那麼根據定義,我們應該從b到a也加上一條邊,對嗎? – ueg1990 2013-07-29 17:26:50

3

這不是真的特定於Java。兩個最常見的表示是鄰接矩陣和列表。詳細信息here

如果你想有一個圖書館,JGraphT是好的

+0

一個「圖形數據庫」我懷疑是我做的代碼,如: 公共類頂點{ .. } public class Edge { ... } 如果是這樣的話,我把它作爲屬性。順便說一下,其目標是用Prim算法制作最小生成樹。什麼樣的表示更好? – 2012-03-03 09:37:52

+0

我應該自己做結構,不要使用圖書館或其他東西 – 2012-03-03 09:41:23

0

此而取決於你的使用情況,但你可能想嘗試利用諸如neo4j

+0

(我知道你必須自己製作結構,但其他人也可能不會:)) – 2012-03-03 10:04:05