解析文本文件以创建对象

时间:2011-04-03 07:38:33

标签: ruby algorithm

我正在尝试解析格式为

的文本文件
A B 2  
A G 6   
A C 99  
...  
B C 7  
B E 2  
B G 99

现在,这些代表“节点”和它们之间的“成本”以实现最短路径算法。 我已经决定创建一个Node类,它有2个实例变量,一个名称和一个哈希数组,它们是相邻的节点和成本。

我试图弄清楚如何将文件解析为每组线的一系列节点对象。 99的成本意味着节点没有连接。

1 个答案:

答案 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方法会将n1n2与权重wt.to_i连接起来。

您的最短路径算法可能是对图形对象的方法调用。