我正在编写一个网络爬虫,我需要找到两个 URL 之间的最小距离。
我用哈希表示网络。每个不在网络末端的节点都被键入到它所连接的节点的向量:
hash = {:v0 => [:v1, :v2, :v3],
:v1 => [:v4, :v5, :v6],
:v2 => [:v7, :v8, :v9],
:v3 => [:v10, :v11, :v12],
:v4 => [:v13, :v14, :v15]}
此解决方案不起作用。问题是我只在找到目标时增加距离(dist 变量),所以结果总是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
我该如何修复它,使其在网络的每一层都增加?