2011-04-03 37 views
2

我試圖解析的文本文件的形式爲:解析文本文件來創建對象

A B 2 
A G 6 
A C 99 
... 
B C 7 
B E 2 
B G 99 

現在,這些代表「節點」和「成本」,它們之間實現最短路徑算法。 我決定創建一個Node類,該類有兩個實例變量,一個名稱和一組散列,這些散列是相鄰節點,並且需要付費。

我想弄清楚如何將文件解析爲從每組行中的一系列節點對象。 99的代價意味着節點沒有連接。

+2

另外,你可以使用[RGL](http://rgl.rubyforge.org/)(Ruby Graph Library) – 2011-04-03 11:54:53

回答

6

首先,您還應該有一個Graph類來管理節點和邊緣。然後,這樣的事情應該讓你開始:

g = Graph.new 
File.open('your_data_file').each do |line| 
    n1, n2, wt = line.split(/\s+/) 
    n1 = g.find_or_create_node(n1) 
    n2 = g.find_or_create_node(n2) 
    wt = wt.to_i 
    g.add_edge(n1, n2, wt) if(wt != 99) 
end 
# g is now your fully populated graph. 

圖表,g,跟蹤它有這麼find_or_create_node可以返回節點,如果它已經存在或創建它,如果沒有緩存的節點。 add_edge方法會將n1n2連接到權重邊緣wt.to_i

您的最短路徑算法可能是圖表對象的方法調用。

+0

@emel,這似乎是你的問題的正確答案。如果它是正確答案,你可以檢查它嗎? – 2011-05-19 20:21:13

+0

我得到了一個'NoMethodError:未定義的方法'新的RGL :: Graph:Module'錯誤 – jspooner 2011-09-20 02:43:30

+0

@jspooner:你可能想談談nash,他們在問題評論中提到了RGL。 – 2011-09-20 02:59:11