Я получил файл для представления списка смежности узлов в графе в виде текстового файла, который мне нужно проанализировать. Первая строка для общего количества узлов. Вторая строка - это node1 вместе со списком узлов, к которым она подключается (ненаправленный граф). Например
7
2 3 -1
1 3 4 5 7 -1
1 2 -1
2 6 -1
2 6 -1
4 5 -1
2 -1
line1: граф имеет всего 7 узлов.
line2: Node1 подключается к Node2, Node3.
линия 3: узел 2 подключается к узлу 1, узлу 3, узлу 4, узлу 5, узлу 7.
-1 - бесполезный вид.
Вот моя текущая реализация ruby. Я пытаюсь найти способ настроить его
def parse_file(filename)
total_nodes = `wc -l "#{filename}"`.strip.split(' ')[0].to_i
node_hash = Hash.new
File.foreach(filename).with_index do |line, line_num|
# convert each line into an array
line = line.strip.split(" ")
# take out weird -1 at the end of txt file in each line
line = line[0...-1]
#puts "#{line_num}: #{line}"
# how come node_hash[Node.new(line_num)] = line does not work?
node_hash[Node.new(line_num)] = line
end
end
parse_file('test_data.txt')
Мой класс узла имеет массив adjacency_nodes, который я могу вставить в него node2 и node3. Например: node1.adjancency_nodes << node2 </p>
class Node
attr_accessor :id, :state, :adjacent_nodes, :graph
def initialize(id)
@id = id
@adjacent_nodes = []
end
def to_s
"node #{@id}"
end
end
Какой самый простой способ перебрать этот текстовый файл, создать новые узлы и сохранить его в хеше, а также принудительно передать все его смежные узлы?