2011-04-11 96 views
2

我想要創建一個有向圖,我有三個變量:字符串X,Y,Z 和第一頂點含有3個變量和下包含在接下來的3直到循環創建有向圖

的端部

我有這樣的:

BufferedReader reader = new BufferedReader(
    new StringReader(contentTextArea.getText())); 

try { 
    str =reader.readLine(); 

    while(str != null) { 
    String splitted[] = str.split("\\|"); 
    String x = splitted[0].trim(); 
    String y = splitted[1].trim(); 
    String z = splitted[2].trim(); 
    }   
} 

所以這段代碼給我每次3串,我想,每次以創建頂點和邊緣,這將創造在最後的圖表。 的代碼可能是這樣的,但我不知道該寫什麼 createVertex (String x,y,z),addEdge()方法。

public class graph { 
    createVertex (String x,y,z); 
    addEdge(); 
} 
+1

你需要一個實現(數據結構等)來保存圖形信息。取決於你需要什麼樣的操作,你應該選擇正確的實現(結構) – Winfred 2011-04-11 08:31:20

+0

你能解釋更多 – fayza 2011-04-11 08:34:16

+1

除了Winfred的說法,我認爲你應該重新考慮你的輸入形式。你每次創造「頂點和邊緣」? (1)創建一個不具有相同頂點數和邊數的圖時,你會做什麼? (2)在第一行,你的邊緣要加入哪兩個頂點? - 哦,你的'createVertex'和'addEdge'的簽名對我來說沒有多大意義。用於'createVertex'的三個字符串?他們是爲了什麼?沒有參數給'addEdge'?那麼它應該添加什麼優勢呢? – 2011-04-11 08:35:06

回答

0

如果要創建一個linestrip,即,每個行表示一個頂點和邊緣是由可以創建兩個連續的頂點形成/使用表示一個頂點和一個Edge類,它具有一參考一個Vertex類形成其終點的2個頂點。

在你的圖類中,你可以只有一個頂點列表和一個邊緣列表。 createVertex()然後可以只添加一個新的頂點到列表中,而addEdge()會使用列表中的最後兩個頂點(如果至少有兩個頂點!)創建一個邊,並將邊放在邊線列表上。

如果以後有由特定頂點形成的邊(即不是最後兩個),可以使用列表中每個頂點的索引引用它們並通過這些索引定義邊(即,頂點0的邊到5可以被定義爲0,5)。

0

這真的取決於你如何代表你的圖。我會推薦使用第三方庫,如JGraphJGraphT。如果你不能使用第三方庫(例如作業或者你只是想學習),那麼你需要定義你自己的Graph類。

兩個常見的表示是連接矩陣和鄰接表。這兩種表示方式都可以適用於您。

創建一個新的頂點很簡單,只需在JGraph圖上調用addVertex即可。這將返回一個頂點對象。您需要爲它提供兩個參數,一個名稱和一個數據對象。對於名稱,可以使用遞增的id號碼或原始的線路字符串。然後,您需要從三個字符串中創建一個數據對象,從而爲我提供一個自定義數據對象。

我會跟蹤插入的最後一個節點(從null開始),然後在前面的i不爲空時在頂點之間創建邊。確保每次迭代更新前一個頂點。

+0

我使用JGraph庫 – fayza 2011-04-11 08:56:26

+0

addEdge位於兩個連續的頂點之間 – fayza 2011-04-11 08:58:07