如何确定两个节点是否属于同一个树/图?

时间:2017-10-06 03:43:16

标签: algorithm graph tree binary-search-tree nodes

我在接受采访时被问到这个问题,以确定两个人是否在Facebook直接或间接关联。

说有一些朋友b,c,d,e和c有几个朋友b,d,f,g和f有朋友x,y,z。然后a和z是间接的朋友。

是否有一个很好的算法来确定它们是如何连接的?

This帖子有类似的问题,但他有太多的标准,所以我认为必须有更好的方法来做到这一点。任何人都可以提出建议吗?

1 个答案:

答案 0 :(得分:2)

如果可以访问,请运行Breadth First Search以获得到达该特定朋友的最小跃点数。到目前为止,访问过的节点上有一些书籍,您可以让被访问的朋友联系到被搜索的朋友。

此算法在Liner time O(V + E)中运行。

PsuedoCode:

广度优先搜索(图形,根,目标):

create empty set Checked
create empty queue Queue      

add Root to Checked
Queue.enqueue(Root)                      

while Queue is not empty {
    Current = Queue.dequeue()
    if Current.has(Goal) {
        return Current
    }
    for each Node that is adjacent to Current {
        if Node is not in Checked {
            Checked.add(Node)
            Queue.enqueue(Node)
        }
    }
}

如果在找到被搜查的朋友之前需要访问的朋友大于1,你可以说他们是间接连接的。

这也可用于检查它们是否已连接。