2011-04-03 4 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) –

ответ

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.

Ваш алгоритм кратчайшего пути, предположительно, был бы вызовом метода для объектов графа.

+0

@emel. Кажется, это правильный ответ на ваш вопрос. Можете ли вы проверить его как правильный ответ, если это так? –

+0

Я получаю «NoMethodError: неопределенный метод' new »для RGL :: Graph: Module 'Error – jspooner

+0

@jspooner: Вероятно, вы хотите поговорить об этом, они упомянули RGL в комментариях к вопросу. –

Смежные вопросы