Szczerze mówiąc nie spodziewałem się takiego odzewu w piątkowy wieczór
Dość biadolenia. Oto kod (uwaga - proszę o wyrozumiałość - wiem że jest brzydki i być może nie spełnia postawionych wymagań:) )
[code]# tu się wszystko popsuje
def get_shortest_path(start_point, end_point, array)
mini_array = []
wyłapujemy potrzebne nam odcinki
array.each do |tiny_array|
if (tiny_array.include?(end_point))
mini_array << tiny_array
end
end
i szukamy tego jedynego…
shortest_node = shortest_element_from(mini_array)
konstruujemy najkrótszą ścieżkę element po elemencie
@traversed << shortest_node.dup
jak nie ma więcej elementów to znaczy że skończyliśmy pracę
if shortest_node.include?(start_point)
return
else
# miejsce gdzie robi się smutno..... niszczymy tablicę schema - why????
# nawet object_id są różne
# tu chcę wydobyć symbol końca odcinka,
# który ma posłużyć za oznaczenie następnego,
# a nie zawsze będą to kolejne litery alfabetu
shortest_node.delete(end_point)
shortest_node.pop
next_last_point = shortest_node.first
# nie chcemy ponownie sprawdzać już odhaczonych elementów
array -= mini_array
# i od nowa..
get_shortest_path(start_point, next_last_point, array)
end
end
def shortest_element_from(array)
infinity = 1.0/0
current_lowest_element = [“X”,“Y”, infinity]
array.each do |element|
if element.last < current_lowest_element.last
current_lowest_element = element
end
end
current_lowest_element
end
#------------------Koniec metod--------------------------------
docelowa najkrótsza ścieżka
@traversed = []
tablica tablic z oznaczeniem końców odcinka i jego długości
to ona ma się nie zmieniać
schema = [
[ ‘A’, ‘B’, 50],
[ ‘A’, ‘D’, 150],
[ ‘B’, ‘C’, 250],
[ ‘B’, ‘E’, 250],
[ ‘C’, ‘E’, 350],
[ ‘C’, ‘D’, 50],
[ ‘C’, ‘F’, 100],
[ ‘D’, ‘F’, 400],
[ ‘E’, ‘G’, 200],
[ ‘F’, ‘G’, 100]
]
#some_array = Marshal.load( Marshal.dump(schema) )
some_array = schema.clone
id obiektów nie mówi wszystkiego??
puts " schema id: " + schema.object_id.to_s
puts "some_array id: " + some_array.object_id.to_s
get_shortest_path(“A”,“G”, some_array)
redundant = schema - @traversed
puts "redundant: "
redundant.each { |element| print element; puts }
puts "schema: "
schema.each { |element| print element; puts }[/code]
Sytuacja podobna do przedstawionych przez wszystkich przedmówców i… dlatego nie wiem co jest u mnie nie tak skoro nie działa.
Prawdopodbnie winny jest jakiś błąd konstrukcyjny całego kodu, może @traversed coś psuje?
Z góry dzięki za cierpliwość…
Pozdrawiam i zamieniam fotel na wyro…