我试图找到所有朋友的名字,然后是他们所有朋友的名字,一直到4度。我需要跟踪一个朋友来自我的程度(例如直接朋友=学位1)我有一些代码,但我真的不明白如何解决这个问题。任何建议都会很棒。
def getFriendNames(name)
ret=Array.new
#lots of code here, doesnt change the problem
return ret #returns unique list of friends names
end
arr=Array.new
friends=getFriendNames("ME")
arr.push(friends) #element1 of the array arr is now friends of ME. Element 2 should be friends of friends of ME
friends.each{|x|
getFriendName(x) #this returns another array of friends
}
答案 0 :(得分:1)
这可能不是最有效的解决方案,但它是最简单直接的解决方案。
friends = Hash.new
to_process = ["ME"]
(0..4).each { |distance|
processing = to_process
to_process = []
processing.each { |person|
if !friends.has_key?(person)
friends[person] = distance
to_process.concat(getFriendNames(person))
end
}
}
如果您想跟踪“来源”朋友,那么您可以写下:
friends = Hash.new
to_process = ["ME"]
4.times {
processing = to_process
to_process = []
processing.each { |source|
getFriendNames(source).each { |person|
if !friends.has_key?(person)
friends[person] = source
to_process.push(person)
end
}
}
}
请注意,实际上可能有多个“来源”朋友。例如,如果您有A
和B
为好友并且他们都有朋友C
,那么C
的来源朋友可以是A
或B
。