我試圖解析的文本文件的形式爲:解析文本文件來創建對象
A B 2
A G 6
A C 99
...
B C 7
B E 2
B G 99
現在,這些代表「節點」和「成本」,它們之間實現最短路徑算法。 我決定創建一個Node類,該類有兩個實例變量,一個名稱和一組散列,這些散列是相鄰節點,並且需要付費。
我想弄清楚如何將文件解析爲從每組行中的一系列節點對象。 99的代價意味着節點沒有連接。
我試圖解析的文本文件的形式爲:解析文本文件來創建對象
A B 2
A G 6
A C 99
...
B C 7
B E 2
B G 99
現在,這些代表「節點」和「成本」,它們之間實現最短路徑算法。 我決定創建一個Node類,該類有兩個實例變量,一個名稱和一組散列,這些散列是相鄰節點,並且需要付費。
我想弄清楚如何將文件解析爲從每組行中的一系列節點對象。 99的代價意味着節點沒有連接。
首先,您還應該有一個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
方法會將n1
和n2
連接到權重邊緣wt.to_i
。
您的最短路徑算法可能是圖表對象的方法調用。
@emel,這似乎是你的問題的正確答案。如果它是正確答案,你可以檢查它嗎? – 2011-05-19 20:21:13
我得到了一個'NoMethodError:未定義的方法'新的RGL :: Graph:Module'錯誤 – jspooner 2011-09-20 02:43:30
@jspooner:你可能想談談nash,他們在問題評論中提到了RGL。 – 2011-09-20 02:59:11
另外,你可以使用[RGL](http://rgl.rubyforge.org/)(Ruby Graph Library) – 2011-04-03 11:54:53