Webクローラーを作成していますが、2つの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
ネットのすべてのレイヤーで増分するように修正するにはどうすればよいですか?