递归地找朋友的朋友等

时间:2015-06-18 19:27:09

标签: ruby

我试图找到所有朋友的名字,然后是他们所有朋友的名字,一直到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
}   

1 个答案:

答案 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
        }
    }
}

请注意,实际上可能有多个“来源”朋友。例如,如果您有AB为好友并且他们都有朋友C,那么C的来源朋友可以是AB