如何从给定节点中找到距离小于n的节点?

时间:2015-06-30 21:42:41

标签: algorithm graph graph-algorithm

理论上,我可以使用Dijkstra算法来查找所有节点的距离,但如果我有一个大图,我将浪费大量时间来计算到远程节点的距离。有没有更有效的算法?

2 个答案:

答案 0 :(得分:2)

如果边缘没有加权(或等效,如果它们都具有相同的权重),您可以只运行广度优先搜索直到所需的深度。如果他们 加权,Dijkstra的算法是你的最佳选择:它还按照距离起始顶点的距离增加的顺序探索节点,所以只要找到下一个顶点远离它,就停止它。你的最大允许距离。

答案 1 :(得分:1)

您可以使用修改后的广度优先搜索(即使是加权图表)。

listNodes(node start , int maxRange)
    list queue
    set visited
    add(queue , start)
    add(visited , start)

    while ! isEmpty(queue)
        pair p = remove(queue , 0)

        int distTmp = p.dist
        node n = p.node

        //only neighbours that haven't yet been visited
        for node next in disjoint(listNeighbours(n) , visited)
            add(visited , next)//mark as visited
            //store the node in the queue with the distance to start as attribute
            add(queue , pair(next , distTmp + distance(n , next)))

    return visited

如果图表未加权,则distance(node , node)将始终为neighbournodes返回1.