Я пишу веб-искатель, и мне нужно найти минимальное расстояние между двумя URL-адресами.Найти расстояние пути между узлами сети?
Я представляю сеть с хешем. Каждый узел, который не находится в конце сети, является ключом к вектору узлов, к которому он подключен:
hash = {:v0 => [:v1, :v2, :v3],
:v1 => [:v4, :v5, :v6],
:v2 => [:v7, :v8, :v9],
:v3 => [:v10, :v11, :v12],
:v4 => [:v13, :v14, :v15]}
Это решение не работает. Проблема заключается в том, что я только увеличиваю расстояние (расстояние переменного), когда он находит цель, так что результат всегда 1
:
def path src, target, hash, dist
return -1 if hash[src] == nil # invalid distance if source is invalid
return dist += 1 if hash[src].include? target
arr = Array.new
for i in hash[src] do
arr.push path(i, target, hash, dist)
end
arr = arr.delete_if {|x| x < 0} # delete invalid values
return -1 if arr.empty?
return arr.min # return the shortest distance
end
Как я могу это исправить, так что будет увеличиваться на каждом уровне сети?