我正在尝试解析格式为
的文本文件A B 2
A G 6
A C 99
...
B C 7
B E 2
B G 99
现在,这些代表“节点”和它们之间的“成本”以实现最短路径算法。 我已经决定创建一个Node类,它有2个实例变量,一个名称和一个哈希数组,它们是相邻的节点和成本。
我试图弄清楚如何将文件解析为每组线的一系列节点对象。 99的成本意味着节点没有连接。
答案 0 :(得分: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
方法会将n1
和n2
与权重wt.to_i
连接起来。
您的最短路径算法可能是对图形对象的方法调用。